Go 言語で構造体にメソッドを追加する
Go 言語では構造体を宣言して、その構造体に対してメソッドを定義することができます。
まず構造体を定義します。
type foo struct { s string t string }
上記で定義した構造体はfoo型です。foo型の変数を宣言します。
p := foo{"aaa", "bbb"} // pはfoo型の構造体の変数 p := foo{s:"aaa", t:"bbb"} // pはfoo型の構造体の変数(key-valueで宣言するパターン)
この構造体にメソッドを追加します。
// 構造体にメソッドを追加 func (f foo) greeting(str string) { fmt.Printf("%s , %s\n", str, f.s) }
構造体のメソッドは以下のように記述します。引数、戻り値はなければ省略可能です。
func (レシーバ名 レシーバ型) メソッド名(引数) 戻り値 { // 処理 }
構造体のメソッドは実は2種類あります。一つは上記のような値メソッドと呼ばれるメソッドで、もう一つはポインタメソッドと呼ばれるメソッドです。上記のメソッドをポインタメソッドに変更するには、レシーバ型を以下のように記述します。
// 構造体にポインタメソッドを追加(*をつける) func (f *foo) greeting(str string) { fmt.Printf("%s , %s\n", str, f.s) }
ポインタメソッドの特徴は、構造体の変数を変更することができることです。
以下は構造体の変数を変更している例です。
package main import ( "fmt" ) type foo struct { s string t string } func main() { p := foo{s: "aaa", t: "bbb"} // pは構造体 fmt.Println(p.s) // aaa fmt.Println(p.t) // bbb p.greeting() // ここで構造体の値を変更する fmt.Println(p.s) // xxx } // ポインタメソッドの場合は、構造体の値を変更することができる func (f *foo) greeting() { f.s = "xxx" }
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント