golang的slice了解及验证
发布时间:2020-12-16 09:32:37 所属栏目:大数据 来源:网络整理
导读:golang 中slice的操作 golang收获 如果只是分配了 var st []SelfType,进行赋值,那么就会是吧,除非使用 make 分配一个内存空间 注意, slice在make的时候可以制定 len,cap长度, len,cap的区别在于: len是当前slice中的element的长度, cap是slice的长度
golang 中slice的操作golang收获
实践过程go的slice type是构建在Go‘s array type的基础之上。 golang对于slice定义了一组新的格式, 包括比如 []int,[][]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)) 自定义的slice格式自定义一个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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |