ポインタ

Go にはポインタがあります。ポインタは値のメモリアドレスを保持します。

*T 型は T 値へのポインタです。そのゼロ値は nil です。

  1. var p *int

& 演算子はそのオペランドへのポインタを生成します。

  1. i := 42
  2. p = &i

* 演算子はポインタの基になる値を示します。

  1. fmt.Println(*p) // read i through the pointer p
  2. *p = 21 // set i through the pointer p

これは「デリファレンス」または「間接参照」として知られています。

C とは異なり、Go にはポインタ算術がありません。

  1. package main
  2. import "fmt"
  3. func main() {
  4. i, j := 42, 2701
  5. p := &i // point to i
  6. fmt.Println(*p) // read i through the pointer
  7. *p = 21 // set i through the pointer
  8. fmt.Println(i) // see the new value of i
  9. p = &j // point to j
  10. *p = *p / 37 // divide j through the pointer
  11. fmt.Println(j) // see the new value of j
  12. }