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(ES20xx),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^



コメント