go中make用法及常见的一些坑

2022-12-26 201阅读 0评论

make用法?=参数用法

golang分配内存有一个make函数,该函数第一个数类型,第二个参数的分配的空间,第三个

参数时预留分配空间,前两个参数很好理解,但对第三个参数不是很理解,

例如a:=make([]int,5,10),len(a)输出结果为5,cap(a) 输出结果为10 ,对a[4]可以正常赋值,但是对a[5]进行赋值就会发现报错

package main   import "fmt"   func main(){ 	a := make([]int, 5, 10) 	fmt.Println("len(a):", len(a)) 	fmt.Println("cap(a):", cap(a)) 	fmt.Println(a) 	b := a[:cap(a)] 	fmt.Println(b) }

使用make常见的一些坑

1:Slice使用make

slice在make了之后,设置了slice的大小之后。实际上是在slice里面添加了len个数据

如果在使用append来操作的话,相当于在slice后面添加新的元素

arr := make([]int, 10) 	fmt.Println("len=", len(arr), "cap=", cap(arr), "arr", arr)   	arr = append(arr, 1) 	fmt.Println("len=", len(arr), "cap=", cap(arr), "arr", arr)   	arr = make([]int, 10, 20) 	fmt.Println("len=", len(arr), "cap=", cap(arr), "arr", arr)

输出结果

go中make用法及常见的一些坑

2:Map使用map

注意:map在使用make的时候,就算指定了len,也是不起作用的,这个len起不到限制的作用。如:

temp := make(map[string]int) 	fmt.Println("len(temp):", len(temp), "temp:", temp)   	temp1 := make(map[string]int, 3) 	fmt.Println("len(temp1):", len(temp1), "temp1", temp1)

输出结果

go中make用法及常见的一些坑

下面的例子阐述了new和make的区别

var p *[]int = new([]int)       // 分配切片数据结构; *p == nil; 几乎没有作用 var v  []int = make([]int, 100) // 切片v引用一个[100]int的数组  // 没有必要: var p *[]int = new([]int) *p = make([]int, 100, 100)  // 惯用做法: v := make([]int, 100)

记住,make只应用于映射、切片和信道,并且不会返回指针。如果想获得一个显式的指针,使用new分配空间或者直接获取变量的地址。

总结

到此这篇关于Go中make用法及常见的一些坑的文章就介绍到这了,更多相关GO的make用法内容请搜索云初冀北以前的文章或继续浏览下面的相关文章希望大家以后多多支持云初冀北!

免责声明
本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。侵删请致信E-mail:goliszhou@gmail.com
$

发表评论

表情:
评论列表 (暂无评论,201人围观)

还没有评论,来说两句吧...