如何在 Golang 中使用 map 接口?
How to use interface with map in Golang?
我有一个实现接口的结构 - 因此我可以将该结构分配给所述接口的变量。
但我想创建一个从字符串映射到 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{}
}
var thisWorks Whoa = Boom{}
之所以有效,是因为 Boom{}
实现了 Whoa
。
您可能会想,既然 Boom
实现了 Whoa
,那么 map[string]Boom
也可以是 map[string]Whoa
。但是不能。
您可以做的是创建一个map[string]Whoa
,其值为Boom{}
s。
var thisShould poppa = map[string]Whoa{"first": Boom{}}
故事的寓意是,接口类型的切片和映射可以包含满足该接口的任何值,但满足接口的类型的切片和映射不等同于那个接口.
Write code to copy the map[string]Boom{} to a poppa
如果您有一个 map[string]Boom
想要变成 map[string]Whoa
,正确的方法是:
whoas := make(map[string]Whoa)
for k, v := map[string]Boom{} {
whoas[k] = v
}
我有一个实现接口的结构 - 因此我可以将该结构分配给所述接口的变量。
但我想创建一个从字符串映射到 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{}
}
var thisWorks Whoa = Boom{}
之所以有效,是因为 Boom{}
实现了 Whoa
。
您可能会想,既然 Boom
实现了 Whoa
,那么 map[string]Boom
也可以是 map[string]Whoa
。但是不能。
您可以做的是创建一个map[string]Whoa
,其值为Boom{}
s。
var thisShould poppa = map[string]Whoa{"first": Boom{}}
故事的寓意是,接口类型的切片和映射可以包含满足该接口的任何值,但满足接口的类型的切片和映射不等同于那个接口.
Write code to copy the map[string]Boom{} to a poppa
如果您有一个 map[string]Boom
想要变成 map[string]Whoa
,正确的方法是:
whoas := make(map[string]Whoa)
for k, v := map[string]Boom{} {
whoas[k] = v
}