anomalocaristan’s blog

JSやGo、設計などについて学んだことをメモしておくサイトです

Goの構造体をポインタで操作する

Goの構造体はポインタで参照・代入ができる。

Goの構造体からポインタを取り出し、ポインタを利用して値を代入する

package main

import "fmt"

// 構造体の定義
type Temp struct {
  X int
  Y int
}

func main () {
  // 構造体の初期化
  a := Temp{1, 2}
  p := &a
  p.X = 100
  fmt.Println(a)
  // ->  {100, 2}
  // ポインタで代入した場合も、元の構造体が変更されている

  fmt.Println(*p)
  // -> {100, 2}
  // もちろんポインタが指し示す内容も元の構造体と等しくなる
}

構造体を初期化する。※ただし、値は一部だけ指定したい

構造体を初期化する場合、プロパティの値を指定する時はすべてを列挙しないとエラーになる

package main

import "fmt"

type Temp struct {
  X int
  Y int
  Z int
}

func main () {
  a := Temp{1}
  fmt.Println(a)
  // -> too few values in Vertex literal
}

エラーを回避するために、hoge: 構文を使用する。
指定されたプロパティのみ値が代入される。
他のプロパティはデフォルト値が適用される。

package main
 
import "fmt"

type Temp struct {
  X int
  Y int
  Z int
}

func main () {
  b := Temp{Y: 5}
  fmt.Println(b)
  // -> {0, 5, 0}
}

参考:
A Tour of Go