1

次のコードを使用すると、型を混在させて、それらのインターフェイスでそれらを取得できるようになることを期待していましたが (おそらく可能でしょうか?)、明らかに機能しません。リフレクションのようなものを使用せずに、頻繁に使用されるループでは高価になる可能性がありますが、ここで試していることを達成する方法はありますか? 保存したいタイプごとに個別のリストを作成する必要がありますか?

コード:

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_

4

1 に答える 1

2

38 行目の型アサーションからポインター逆参照を削除するだけです。

http://play.golang.org/p/SksZhXx3Hp

于 2012-12-12T04:14:48.553 に答える