这可能有点傻,如果是的话我道歉但是我如何保证在我可以使用它之前在结构中定义一个字段?
让我用例子解释一下:
package main
import (
"fmt"
)
type animal struct {
name string
activity func()
}
var elephant = animal{
name: "elephant",
activity: func() {
fmt.Println("Eat grass")
fmt.Println("Stampede")
},
}
var lemur = animal{
name: "lemur",
activity: func() {
fmt.Println("Eat fruits")
fmt.Println("Climb trees")
},
}
func main() {
zoo := []animal{
elephant,
lemur,
// more goes here
}
for _, cage := range zoo {
cage.activity()
}
}
https://play.golang.org/p/0nXNk0DMuVd
假设animal
数组中可能有更多zoo
个结构。有没有更好的方法来确保每个动物必须定义activity
功能,而不是执行以下操作:
for _, cage := range zoo {
if cage.activity != nil {
cage.activity()
}
}
使用method
在这里看起来不太可行,因为activity
的实现对于每只动物来说都是完全不同的。我也在考虑使用interface
,但是我不需要创建每种动物的类型吗?
我对上述if
解决方案不满意的原因是检查仅在运行时完成。但是,如果这是解决这个问题的唯一方法,那么我也可以。