Golang 值,指针与引用类型

好的代码会说话,见码

package main

// beego go常用框架
// &取地址 *解引用
// 值在传递给函数或者方法的时候会被复制
// 通道、函数、方法、映射、切片是引用变量,它们持有的都是引用,也即保存指针的变量。

import (
    "fmt"
)

// 解构赋值,无需使用第三方临时变量交换
// 声明三个持有指针的变量
func swap1(x, y, p *int) {
    if *x > *y {
        *x, *y = *y, *x
    }
    *p = *x * *y
}

// 持有值变量交换
// 类似于C语言的函数声明
// 支持多值返回
func swap2(x, y int) (int, int, int) {
    if x > y {
        x, y = y, x
    }
    return x, y, x * y
}

func main() {
    // 类型推导声明赋值
    i := 0
    j := 5
    product := 0

    // 取内存地址交换
    swap1(&i, &j, &product)
    fmt.Println(i, j, product)

    a := 64
    b := 23

    // 复制值交换
    a, b, p := swap2(a, b)
    fmt.Println(a, b, p)

}

执行

go run pointer.go

结果

0 5 0
23 64 1472

猜你喜欢

转载自blog.csdn.net/u011584949/article/details/81096089