Open3

golang tips

構造体のポインタには注意

type Size struct {
  Height  int
  Width   int
}

type PC struct {
  Name string
  Size    *Size
}

上記のように構造体を作成したときにPCはSizeのポインタを保持しているため、上書きすると元の値も変更してしまう。

例)

pc1 := PC{"Surface", &Size{60, 120}}

pc2 := pc1

pc2.Name = "Macbook air"
pc2.Size.Height = 50
pc2.Size.Width = 100

fmt.Println(pc1, pc1.Size)
 // => {"Surface", [ポインタ]} ${50, 100}
fmt.Println(pc2, pc2.Size)
 // => {"Macbook air", [ポインタ]} ${50, 100}

上記のように上書きで利用するとポインタの部分だけ値が上書きされてしまいます。

ローカル変数を削減する

// ローカル変数が処理以降も残る
_, err := getSomething()

if err != nil{
  return err
}

fmt.Println(err) // => err(nil)が表示される


// ローカル変数のスコープがif文内になるためこの処理が終わるとerrは定義されていないことになる
_, err := getSomething(); if err != nil {
  return err
}

fmt.Println(err) // => errは定義されていないのでビルドエラーになる


開発系のツールはgo installする

go getでインストールするとgo modに追記されてしまう。
go mod tidyでファイルから消せるが面倒。

ログインするとコメントできます