golang基础小记(9)——指针、new和make

指针

Go语言中的指针不能进行偏移和运算,没有内存泄漏的风险。

  • &:取地址操作符,取出变量的地址
  • *:取值操作符,取出指针指向的值

b := &a:这里的b是指针变量,保存变量a的地址,且*b == a
指针变量是引用类型的变量,声明时不会默认分配内存空间(值类型的变量在声明时会默认分配内存空间),需要使用内建函数来分配。
如果只声明就直接赋值,会引发panic

new

new是一个内建函数,用于值类型的内存分配。使用方法如下:
a := new(Type)
Type表示类型,new函数返回*Type类型的指针,指向的值对应类型的零值。

a := new(int)
fmt.Printf("%T\n", a) // *int
fmt.Println(*a)       // 0
*a = 1
fmt.Println(*a) // 1

make

make用于slicemap以及chan这三个引用类型的初始化,其返回的类型就是这三个类型本身,而不是他们的指针类型。

  • slicemake([]T, len, cap)T表示元素类型;len表示切片长度,每个元素初始化为对应类型的零值;cap表示容量,默认等于长度,其值必须大于等于长度。
  • mapmake(map[T1]T2, size),第一个参数是类型;size表示初始化分配内存的大小,可忽略,忽略时会分配一个小一点的内存。可以估算好程序运行期间需要的内存大小,避免不停的动态扩容。初始化后的长度是0。
  • channelmake(chan T, cap),第一个参数是类型;cap表示容量,默认是0。

参考

猜你喜欢

转载自blog.csdn.net/m0_37710023/article/details/107559760