以下のように構造体の中に別の構造体を埋め込むこと。
type Base struct {
ID int
Name string
}
func (b Base) GetName() string {
return b.Name
}
type User struct {
Base // 型埋め込み
Email string
}
以下のように、User構造体のインスタンスからBase構造体の中身を直接使用できる。これを プロモートする
と呼ぶ
user := User()
user.ID
// user.Base.ID と書かなくても良い
以下のように実装することで、InMemのレシーバから直接LockやUnLockにアクセスしてGetメソッドを実装できる
type InMem struct {
sync.Mutex // <- 埋め込みフィールド
m map[string]int
}
func New() *InMem {
retur &InMem{m: make(map[string]int }
}
func (i *InMenu) Get(key string) (int, bool) {
i.Lock() // <- MutexのLockメソッドに直接アクセス
v, contains := i.m[key]
i.Unlock() // <- Unlockも
return v, contains
}
しかしこれは誤り、MutexのLock, Unlockは本来隠蔽されているべきもの。
こうした意図しないメソッドの公開を意識する必要がある。
富山在住のプログラマー。
フルリモートで働いています。
Categories
AWS
Cloudflare
Docker
Github
go
html
JavaScript
microCMS
MySQL
Monthly Archives
2024/12 (1)
2024/11 (3)
2024/10 (1)
2024/09 (3)
2024/08 (7)
2024/07 (7)
2024/06 (4)
2024/05 (5)
2024/04 (6)