bam6o0の記憶域

忘備録になればいいな

Go言語の勉強記録12bit

メソッド

  • 型にメソッドをもたせることが出来る。
  • メソッドも関数の一種
  • 特定の型と結びつけることが出来る。

メソッドの宣言

  • 書式
func (レシーバの変数名 レシーバの型) メソッド名(パラメータリスト) 戻り値の型{
  //処理
  
  //呼び出し元への復帰
  return 戻り値
}
  • レシーバが追加
  • レシーバによってメソッドがどの型に所属するか決まる。
  • レシーバの変数名と型を()内に記述
  • 呼び出すときはメソッドの持つ値の後ろに.を記述し、メソッド名を記述する。
  • レシーバの変数名は省略可能
  • 省略した場合、変数名を使ってメソッド呼び出しの対象となった値へアクセスができない。
  • レシーバとして使用する型は、メソッドと同じパッケージ内で宣言されている必要がある。
  • インターフェイス型はレシーバにできない。

実行結果

$go run method.go
1234

レシーバをポインタにする

  • レシーバ変数を使ってメソッドを呼び出した対象の値にアクセスできる
  • 値をメソッド内で変更するにはレシーバの型をポインタにする
  • はじめからポインタである型は使用できない

実行結果

$go run receiver_ptr.go
0
2

メソッド値

  • 値とメソッドの紐付けをメソッド値として扱える。
  • メソッド値は関数のように呼び出せる。
  • 通常は紐付けられている値のメソッドが暗黙的に呼び出される。

実行結果

$go run method_value.go
3
6