1 回答
TA貢獻1735條經驗 獲得超5個贊
所以你以一種相當OOP的方式思考,Go沒有繼承(澄清它有結構嵌入,這就是你在第一個例子中所做的)。我們傾向于用組合來解決問題。
您可以考慮解決問題的一種方法是如下所示。
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"})
}
名稱可以改進,但它應作為可以采取的方法的基本示例。
編輯:基于下面留下的評論的示例
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 關注
- 116 瀏覽
添加回答
舉報
