go学习② 指针 匿名函数

指针是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


猜你喜欢

转载自www.cnblogs.com/m4kemoretime/p/10800487.html