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 关注
- 115 浏览
添加回答
举报
