1.Go语言的指针
学过C++和C语言的小伙伴应该对指针类型并不陌生,指针类型和一般类型不一样的地方在于其存储的是地址而不是一个值。以下通过一个简单的例子感受指针类型和一般类型之间的区别:
package main
import "fmt"
func foo1 (b int) {
// 将传入的值修改为20
b = 20
fmt.Println("b value is ", b, "in foo1")
}
func main (){
// 声明一个整型变量a,并赋值为10
var a int = 10
fmt.Println("a value is ", a, "before foo1")
foo1(a)
fmt.Println("a value is ", a, "after foo1")
}
运行结果:
a value is 10 before foo1
b value is 20 in foo1
a value is 10 after foo1
Go语言的函数方法如果用一般类型作为形参类型,则采用的是值传递的方式,这也是为什么在传入a后,在foo1中将值改为20后,在main中a的值仍然是10的原因。可以认为仅仅是将a的值拷贝了一份传入foo1,自身的值并不受foo1的影响。那么有一个新的问题,如果希望通过函数方法修改main中变量的值那应该怎么办呢?这个时候就要用到我们的指针类型,即将变量a的地址传入方法,则函数方法在改变该地址上的内容时修改的便是a变量的值,我们看个例子
package main
import "fmt"
func foo