golang的slice了解及验证

golang的slice了解及验证,第1张

概述golang 中slice的 *** 作 golang收获 如果只是分配了 var st []SelfType, 进行赋值,那么就会是吧,除非使用 make 分配一个内存空间 注意, slice在make的时候可以制定 len, cap长度, len,cap的区别在于: len是当前slice中的element的长度, cap是slice的长度(在自动扩展之后) slice在使用的时候最好要区分出数据量的 golang 中slice的 *** 作 golang收获 如果只是分配了 var st []SelfType,进行赋值,那么就会是吧,除非使用 make 分配一个内存空间 注意, slice在make的时候可以制定 len,cap长度, len,cap的区别在于: len是当前slice中的element的长度, cap是slice的长度(在自动扩展之后) slice在使用的时候最好要区分出数据量的大小是否可以预期,如果是数据量很大,且不确认会有多少的时候,使用append的时候会浪费时间在内存copy了; 验证了一下int8在内存的分配 0xc000016530 0xc000016531 0xc000016532 0xc000016533 0xc000016534 0xc000016535 0xc000016536 0xc000016537 0xc000016538 0xc000016539 0xc000016528 可以看成递增的值为1,最后一个差距是 16528,比16530靠前,分配了两个byte. 验证了一下int16的内存分配 0xc000016540 0xc000016542 0xc000016544 0xc000016546 0xc000016548 0xc00001652a 连续的内存分配, int16是分配两个byte。 验证了一下int的内存分配 验证后知道int与int64一样,是分配8byte的内存地址; 实践过程

go的slice type是构建在Go‘s array type的基础之上。

golang对于slice定义了一组新的格式, 包括比如 []int,[][]int等等,这里有几个问题?

如何定义slice? 如何给slice赋值? slice支持的格式类型? slice在函数调用的格式? int 的内存地址分配大小验证! 给[]int复制

比较简单的方法上对[]int的slice进行append处理

func sint() []int {    var si []int    sii := []int{1,2,3,4}    sii = append(sii,2)    sii = append(sii,3)    fmt.    for i := 0; i < 10; i++ {        si = append(si,i)    }    return si}
如何给[][]int赋值

通过append的方法, 追加的格式需要上 []int的格式;

func ssint() [][]int {    var ssi [][]int    for i := 0; i < 5; i++ {        si := sint()        ssi = append(ssi,si)    }    return ssi}
slice通过append进行自动扩展的代码

可以看到,最后len打印出来的是6, cap打印出来的是8,原因是在append(sii,2)的时候进行了一次扩展;

slice在使用的时候最好要区分出数据量的大小是否可以预期,如果是数据量很大,且不确认会有多少的时候,使用append的时候会浪费时间在内存copy了;

sii := []int{1,4}    sii = append(sii,3)    fmt.Println(sii,len(sii),cap(sii))
@R_301_6942@的slice格式

@R_301_6942@一个selfT的格式,内容为三个串,分别为 name,Age,No; 以SelfT为基础进行slice扩展

type SelfT struct {    name string    Age  int    No   int}func sSelfType() {    // var st [2]SelfT    st := make([]SelfT,5)    st[0] = SelfT{"Pan",30,1001}    st[1] = SelfT{"Wan",31,1002}    fmt.Println(st)}
函数调用

slice调用的时候需要传地址,这样就可以在函数内对slice进行 *** 作赋值

func adsi(s *[]int) {    *s = append(*s,5)}
验证int8,int16,int的内存分配

通过类似如下的代码,看看变量类型在内存中的分配;

var i8 [10]int8    var i88 int8    for i = 0; i < 10; i++ {        i8[i] = int8(i)        fmt.Printf("%p ",&i8[i])    }    fmt.Printf("%p ",&i88)
总结

以上是内存溢出为你收集整理的golang的slice了解及验证全部内容,希望文章能够帮你解决golang的slice了解及验证所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1269714.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存