1. var a int = 2
    2. var pa *int = &a // pa是指向a的指针
    3. *pa = 3
    4. fmt.Println(a)
    5. // 3

    go语言的指针不能进行运算

    go语言的参数传递只有值传递一种方式,不存在引用传递。
    但是go语言可以通过指针来实现相当于引用传递的效果。

    参数传递(值传递):
    image.png
    调用函数f(a)时,把a的值复制一份传给了函数参数a,因此在函数内部对a的改变并不会影响到函数外面的a。

    通过指针来实现相当于引用传递的效果:
    image.png
    当调用函数f(a)时,把a的地址&a复制一份传给了pa,因此pa指向了a,如果在f()内部对pa地址的内容进行改变,就会影响a的值,也就实现了引用传递的效果。

    Object作为参数:
    image.png

    // 变量值交换函数的实现
    
    // 值传递
    func swap_(a, b int) (int, int){
        return b, a
    }
    
    // 通过指针来实现相当于引用传递的效果
    func swap(a, b *int) {
        *b, *a = *a, *b
    }
    
    func main() {
        a, b := 3, 4
        swap(&a, &b) // 或者 a, b = swap(a, b)
        fmt.Println(a, b) 
        // 4 3
    }