如何确保在struct中定义字段?

时间:2018-02-24 20:40:23

标签: go struct

这可能有点傻,如果是的话我道歉但是我如何保证在我可以使用它之前在结构中定义一个字段?

让我用例子解释一下:

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解决方案不满意的原因是检查仅在运行时完成。但是,如果这是解决这个问题的唯一方法,那么我也可以。

0 个答案:

没有答案