用法

  • &取地址 *解引用
  • 值在传递给函数或者方法的时候会被复制
  • 通道、函数、方法、映射、切片是引用变量,它们持有的都是引用,也即保存指针的变量。
  1. // 地址引用,直接内存地址交换
  2. func swap(x, y *int) {
  3. *y, *x = *x, *y
  4. // 也可以是 *x, *y = *y, *x
  5. }
  6. // 值引用,需要把交换好的值返回
  7. func swap1(x, y int) (int, int) {
  8. x, y = y, x
  9. return x, y
  10. }
  11. func main() {
  12. x, y := 1, 2
  13. // 这种方式直接交换x和y的地址,是引用的地址
  14. swap(&x, &y)
  15. fmt.Println(x, y) // will print 2,1
  16. // Now x is 2, y is 1
  17. // 这种方式还得得到swap1()的返回值
  18. x, y = swap1(x, y)
  19. fmt.Println(x, y) // will print 1,2
  20. }