[Go] interfaceを埋め込んでラッパーを作る
こんな感じでinterfaceを埋め込んだ構造体を用意するとラッパーが簡単に作れる。 サードパーティライブラリの構造体の一部機能だけ上書きしたい時とかに便利。
package main
import "fmt"
type St interface {
FuncA(string) string
FuncB(int) int
}
type st struct{}
func (r st) FuncA(s string) string {
return s
}
func (r st) FuncB(i int) int {
return i
}
var _ St = (*st)(nil)
type st2 struct {
St
}
func (r st2) FuncA(s string) string {
return "new" + r.St.FuncA(s)
}
var _ St = (*st2)(nil)
func main() {
var v St
v = &st{}
fmt.Println(v.FuncA("test"), v.FuncB(1))
var v2 St
v2 = &st2{&st{}}
fmt.Println(v2.FuncA("test"), v2.FuncB(1))
}
2021-05-23