package main
import "fmt"
type Pet interface {
Bark()
}
type Dog int
func (d Dog) Bark() {
fmt.Println("W! W! W!")
}
type Cat int
func (c Cat) Bark() {
fmt.Println("M! M! M!")
}
type AdoptFunc func(pet Pet)
func adoptDog(dog Dog) {
fmt.Println("You live in my house from now on!")
}
func adoptCat(cat Cat) {
fmt.Println("You live in my house from now on!")
}
func main() {
var adoptFuncs map[string]AdoptFunc
adoptFuncs["dog"] = adoptDog // cannot use adoptDog (type func(Dog)) as type AdoptFunc in assignment
adoptFuncs["cat"] = adoptCat // the same as above
}
上記のコードと同様に、マップや配列を使用して同様の関数adoptXxxを収集する方法はありますか?そうでない場合、この状況に使用する正しいパターンは何ですか?類似の関数のグループを総称的に表す方法はありますか?
メイク 'adoptCat'は' Cat'の代わりに 'Pet'を受け入れます。一般的には、継承と古典的なOOPを忘れて再設計する。 IMHOのペット、猫、犬は悪い例です。 – Volker