猿问

如何在 Golang 中使用接口与地图?

我有一个实现接口的结构 - 因此我可以将该结构分配给所述接口的变量。


但我想创建一个从 string -> Whoa 接口映射的类型,但在初始化时能够使用具体的结构。这不起作用,我得到:


不能使用 (map[string]Boom 文字) (map[string]Boom 类型的值) 作为变量声明中的 poppa 值


任何帮助表示赞赏!


package main


type Whoa interface {

    yes()

}


type Boom struct {

    hey string

}


func (b Boom) yes() {


}


type poppa map[string]Whoa


func main() {

    var thisWorks Whoa = Boom{}

    var thisDoesnt poppa = map[string]Boom{}

}


慕婉清6462132
浏览 110回答 1
1回答

紫衣仙女

    var thisWorks Whoa = Boom{}之所以有效,是因为Boom{}实现了Whoa.你可能会想,既然是Boomimplements Whoa,那么map[string]Boom也可以是一个map[string]Whoa. 但它不能。您可以做的是创建一个map[string]Whoa其值为Boom{}s 的值。    var thisShould poppa = map[string]Whoa{"first": Boom{}}这个故事的寓意是,接口类型的切片和映射可以保存满足该接口的任何值,但是满足接口的类型的切片和映射不等同于该接口的切片和映射。编写代码将 map[string]Boom{} 复制到 poppa如果你有一个map[string]Boom你想变成一个的map[string]Whoa,正确的方法是这样的:whoas := make(map[string]Whoa)for k, v := map[string]Boom{} {  whoas[k] = v}
随时随地看视频慕课网APP

相关分类

Go
我要回答