Skip to main content

常にいまいち

[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))
}

https://play.golang.org/p/X9co1wWF8Iv