为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕婉清6462132 2022-10-17 17:14:05
我有一个实现接口的结构 - 因此我可以将该结构分配给所述接口的变量。但我想创建一个从 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

}


查看完整回答
反对 回复 2022-10-17
  • 1 回答
  • 0 关注
  • 74 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信