2017-03-11 5 views
0

以下の例では、タイプアサーションエラーが発生しています。インターフェイスから実際のオブジェクトにキャストするときのアサーションエラーのタイプ

エラー:

49:動物園を入力する(IZoo型)Zを変換することはできません:必要型アサーション

49:動物園に割り当てることができない(z)は

type IAnimal interface {} 

type IZoo interface {} 

type Zoo struct { 
    animals map[string]IAnimal 
} 

func NewZoo() *Zoo { 
    var z IZoo = &Zoo{} 

    Zoo(z).animals = map[string]IAnimal{} // cannot convert z (type IZoo) to type Zoo: need type assertion 

    return z // cannot use z (type IZoo) as type *Zoo in return argument: need type assertion 
} 
を.animals

答えて

1

エラーメッセージには、すべてが表示されます。type assertionが必要です。問題がある@TimCooper

y := z.(Zoo) 
y.animals = map[string]IAnimal{} 
+0

は、あなたが1行でそれを行うことができませんでした、私たちはhttps://play.golang.org/p/u3BW9rBmiE – user2727195

+0

が必要です。(動物園).analals = 'この表現が何をすべきだと思いますか?それは何ですか?このステートメントの後に破棄される一時的なオブジェクトを作成します。したがって、あなたがアクセスできないオブジェクトのフィールドに値を割り当てることは何を意味しますか?基本的にはその行を削除することができ、プログラムの観察された動作は変更されません。 – user2727195

+0

@ Z 'user2727195、個別の宣言と代入 – zerkms

関連する問題