猿问

基于相同接口的混合类型列表

我希望下面的代码允许我混合类型并通过它们的接口取回它们(也许可以吗?),但是显然不起作用。如果不使用像反射这样的东西(在频繁使用的循环中可能会很昂贵),有没有办法实现我在这里尝试的东西?我是否需要为要存储的每种类型分别列出清单?


代码:


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_


慕斯709654
浏览 202回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答