指针是go的符合变量的一个类型 就和python中的列表,元组,字段差不多的概念
先引入一个方法,,,,取地址符号 &
func main() { var p int = 18 fmt.Println(&p) }
*************
PS F:\GO_PATH\src> go run .\swittch\kp.go
0xc00005805
声明方式和 普通声明有点差别,用 *
var 指针名 *指针类型
var p *int
func main() {
var p int = 18
fmt.Println(&p)
var pin *int = &p
fmt.Println(&pin)
*pin = 360
fmt.Println(p)
}
*****************************
PS F:\GO_PATH\src> go run .\swittch\kp.go
0xc000058058
0xc000084020
360
匿名函数
func pp() { gg := func(a, b int) int { return a + b } s := gg(3, 2) fmt.Println(s) }
//我对匿名函数的理解是,函数里面的函数
func main() {
pp()
}
defer的匿名函数
func main() { var i int = 10 defer fmt.Println(i) i = 100 } ***********************这个i不是100,说明defer 是代码执行到这里就进行了相关数值的确定,,,后续已经不能修改 PS F:\GO_PATH\src> go run .\swittch\kp.go 10
-----------------------------------------------------
func main() {
var i int = 10
defer func() {
fmt.Println(i)
}()
i = 100
}
*****************
PS F:\GO_PATH\src> go run .\swittch\kp.go
100
---------------------------------------------------------
我们知道:defer 后面必须是一个函数的直行,,第一个例子,那个执行的函数是println,,,
第二个是func匿名函数,,而打印的动作是匿名函数内的函数,,i是prinlt的变量,是prlint执行的时候再去确定,所以打印结果是100