構造体にメソッドを実装する

GOで扱うのはクラスではなく構造体なのですが、なんと構造体にメソッドを実装できます。
実際にサンプルコードを見たほうが分かりやすいと思いますが、

  • メソッドの実装
    func (メソッド内で使用する変数名 構造体) メソッド名 {}
    「メソッド内で使用する変数名」はなんでも良いのですが、一般的に構造体名の頭文字を使用するみたいです。
  • メソッドの呼び出し
    構造体変数.メソッド名

ここまでくるとクラスとあまり変わらないですねw

サンプルコードです。

package main

import (
	"fmt"
)

// User ユーザー基本データ
type User struct {
	ID   int
	Name string
}

// Output ユーザーデータを出力
func (u *User) Output() {
	fmt.Printf("ID=%d, Name=%s\n", u.ID, u.Name)
}

func main() {
	user1 := User{1, "Taro"}
	user2 := &User{ID: 2, Name: "Hanako"}

	user1.Output()
	user2.Output()
}


実行するとこんな感じです。

ID=1, Name=Taro
ID=2, Name=Hanako