go的make用法

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)

输出结果

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)
	

输出结果

你可能感兴趣的:(golang,开发语言,后端)