我希望下面的代码允许我混合类型并通过它们的接口取回它们(也许可以吗?),但是显然不起作用。如果不使用像反射这样的东西(在频繁使用的循环中可能会很昂贵),有没有办法实现我在这里尝试的东西?我是否需要为要存储的每种类型分别列出清单?
代码:
package main
import (
"fmt"
"container/list"
)
type Updater interface {
Update()
}
type Cat struct {
sound string
}
func (c *Cat) Update() {
fmt.Printf("Cat: %s\n", c.sound)
}
type Dog struct {
sound string
}
func (d *Dog) Update() {
fmt.Printf("Dog: %s\n", d.sound)
}
func main() {
l := new(list.List)
c := &Cat{sound: "Meow"}
d := &Dog{sound: "Woof"}
l.PushBack(c)
l.PushBack(d)
for e := l.Front(); e != nil; e = e.Next() {
v := e.Value.(*Updater)
v.Update()
}
}
错误:
prog.go:38: v.Update undefined (type *Updater has no field or method Update)
游乐场:http://play.golang.org/p/lN-gjogvr_
相关分类