go 基础-3


指针

可以理解为就是内存地址

& 获取内存地址
* 根据内存地址来获取值

//函数是值拷贝操作,所以要修改值就需要用到指针操作
  • 对变量进行取地址(&)操作,可以获得这个变量的指针变量。
  • 指针变量的值是指针地址。
  • 对指针变量进行取值(*)操作,可以获得指针变量指向的原变量的值。func modify1(x int) {
	x = 100
}

func modify2(x *int) {
	*x = 100
}

func main() {
	a := 10
	modify1(a)
	fmt.Println(a) // 10
	modify2(&a)
	fmt.Println(a) // 100
}

  • new和make用来做内存分配的,因为Go语言中对于引用类型的变量,我们在使用的时候不仅要声明它,还要为它分配内存空间,否则我们的值就没办法存储,就会出发panic,所以要用new和make来做内存分配。
  • 二者都是用来做内存分配的。
  • make只用于slice、map以及channel的初始化,返回的还是这三个引用类型本身;
  • 而new用于类型的内存分配,并且内存对应的值为类型零值,返回的是指向类型的指针。
  • new返回的是一个指向该类型内存地址的指针,比如int就返回*int
  • make返回类型本身
func main() {

var a *int
a = new(int)
*a = 100
fmt.Println(*a)

var b map[string]int
b = make(map[string]int, 10)
b["xxx"] = 100
fmt.Println(b)

}
Go