imu-note
いむたろ
いむたろ
@imutaroh
新卒エンジニア / データ基盤 × AI

What — 型ごとに揃える

  • Go 公式指針:1つの型に値/ポインタレシーバーを混在させない。変更系メソッドが1つでもあれば全部 * に統一する
  • 標準ライブラリの time.Time は全メソッドが値レシーバー = イミュータブル設計。Add は本体を変えず 新しい Time を返す

だから「読むだけのメソッドなのに * が付いている」ことは普通に起きる。そのメソッド単体の都合ではなく、型全体の方針が理由になっているからだ。逆に time.Time のように全部が値レシーバーなら、「この型は誰にも書き換えられない」と型の側から読み取れる。

How — そもそもメソッドにするか

レシーバーを何にするか以前に、メソッドにするかどうかの判断がある。

  • その型のデータがないと成立しない処理 → メソッド
  • レシーバーのデータを使わない処理 → 普通の関数でいい(例:ImportJobArgs はレシーバーなしの関数)
Success

* の有無は型ごとの方針として揃える。混ぜないと決めておけば、呼ぶ側は「この型は変更されうるか」を型単位で読めるようになる。

関連