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了解及验证所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)