interfaceを具象の構造体に型変換できない
以下のようにModelインターフェイスとTag構造体があります。Tag構造体はModelインターフェイスを実装しています。
[Modelインターフェイス]
type Model interface {
Serialize() []string
}
[Tag構造体]
type Tag struct {
Id int `db:"id"`
Name string `db:"Name"`
}
func (tag Tag) Serialize() []string {
...
}
そして、以下のようなGetModel関数があり、model_typeにtagを渡すと、Tag型のデータが返却されます。この時、GetModelの戻り値の型はModelインターフェイスを指定していますが、Tag構造体はModelインターフェイスを実装しているためちゃんと動きます。
// func GetModel(model_type string) Tag {
func GetModel(model_type string) Model {
if model_type == "tag" {
return Tag{}
} else if model_type == "xxx" {
return Xxx{}
} else {
return Yyy{}
}
return nil
}
}
しかしながら、以下に示すような、Tag構造体のIdメンバへのアクセスができません。
model := GetModel(model_type)
fmt.Println(model.Id)
変数modelの型はreflect.TypeOf()で確認しましたが、Tagであることは確認できましたが、model.Idにアクセスすると、ModelインターフェイスにはIdというメンバも関数もないという旨のエラーメッセージが出てきます。model.(Tag)のようにキャストさせてみたのですが、これも同じ結果でした。
どのようにすれば想定通りに動かすことができるのか、ぜひアドバイスをいただきたく思います。何卒よろしくお願いします。