Go语言中的指针
与 Java 和 .NET 等编程语言不同,Go语言为程序员提供了控制数据结构指针的能力,但是,并不能进行指针运算。Go语言允许你控制特定集合的数据结构、分配的数量以及内存访问模式,这对于构建运行良好的系统是非常重要的。指针对于性能的影响不言而喻,如果你想要做系统编程、操作系统或者网络应用,指针更是不可或缺的一部分。
Go语言中的指针
但是和C语言不同的是:Go语言中不存在指针的操作,所以只需要记住两个符号:
&:取地址符*:根据地址取值
package main
import "fmt"
func main() {
a := 18
pointerA := &a
fmt.Println("a's address is", pointerA)
fmt.Println("a =", *pointerA)
}

指针的类型
指正(pointer)也是有类型的,当指针指向的数据类型是int时,该指针的类型就是*int。同理,当指针指向的数据类型为string时,该指针的类型为*string
func main() {
a := 18
pointerA := &a
b := "abc"
pointerB := &b
fmt.Printf("a(%T),b(%T)\n", pointerA, pointerB)
}

指针的初始化
初始化一个指针可是使用new()方法,但是不能直接创建一个*int类型的变量,他的值将会是nil,见下方代码:
var a *int
var b = new(int)
fmt.Printf("a=%v, b=%v\n", a, b)

使用new()方法新建的指针会出创建一块内存空间,并且吧地址赋值给变量
make()和new()的区别
make()和new()都是用来申请内存的new()方法很少用,一般都是用来给基本数据类型申请内存,string,int,...返回的都是对应数据类型的指针(*string,*int)make()是用来给slice、map、chan申请内存用的,make()函数返回的是对应这三个类型本身的引用

浙公网安备 33010602011771号