我有一个实现接口的结构 - 因此我可以将该结构分配给所述接口的变量。但我想创建一个从 string -> Whoa 接口映射的类型,但在初始化时能够使用具体的结构。这不起作用,我得到:不能使用 (map[string]Boom 文字) (map[string]Boom 类型的值) 作为变量声明中的 poppa 值任何帮助表示赞赏!package maintype Whoa interface { yes()}type Boom struct { hey string}func (b Boom) yes() {}type poppa map[string]Whoafunc main() { var thisWorks Whoa = Boom{} var thisDoesnt poppa = map[string]Boom{}}
1 回答
紫衣仙女
TA贡献1839条经验 获得超15个赞
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
}
- 1 回答
- 0 关注
- 74 浏览
添加回答
举报
0/150
提交
取消