1 回答

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個(gè)贊
所以你以一種相當(dāng)OOP的方式思考,Go沒(méi)有繼承(澄清它有結(jié)構(gòu)嵌入,這就是你在第一個(gè)例子中所做的)。我們傾向于用組合來(lái)解決問(wèn)題。
您可以考慮解決問(wèn)題的一種方法是如下所示。
package main
import (
"fmt"
)
type Namer interface {
Name() string
}
type Cat struct {
name string
}
func (c Cat) Name() string {
return c.name
}
type Dog struct {
name string
}
func (d Dog) Name() string {
return d.name
}
func PetName(n Namer) {
fmt.Println(n.Name())
}
func main() {
PetName(Dog{name: "Fido"})
PetName(Cat{name: "Mittens"})
}
名稱可以改進(jìn),但它應(yīng)作為可以采取的方法的基本示例。
編輯:基于下面留下的評(píng)論的示例
package main
import (
"fmt"
)
type Invoker interface {
Invoke()
}
type Dog struct{}
func (Dog) Bark() {
fmt.Println("Woof")
}
func (d Dog) Invoke() {
d.Bark()
}
type Cat struct{}
func (Cat) Meow() {
fmt.Println("Meow")
}
func (c Cat) Invoke() {
c.Meow()
}
func CallFunc(i Invoker) {
i.Invoke()
}
func main() {
CallFunc(Cat{})
CallFunc(Dog{})
}
- 1 回答
- 0 關(guān)注
- 103 瀏覽
添加回答
舉報(bào)