package main
import (
"fmt"
)
func main() {
var a A
var b B
for _, v := range []WhatAreYou{a, b} {
fmt.Println(v.Question())
}
}
type WhatAreYou interface {
Question() string
}
type A struct {
string
}
type B struct {
int
}
func (a A) Question() string {
return "I'm an A"
}
func (b B) Question() string {
return "I'm a B"
}
上面的代码按我的预期工作,并按预期在每个接口上调用该函数。去玩
在我的实际代码中,我打算让许多不同的类型实现一个接口。如何摆脱 var a a var b B 等,并简单地在切片中声明它们?即我尝试了以下和其他变体并失败了
for _, v := range []WhatAreYou{a A, b B} {
[]WhatAreYou{A{}, B{}}
这是正确的,感谢姆科普里瓦。复合文字
现在我更好地理解了我在这里做什么,我想我明白为什么这个问题也被否决了。这个问题真的没有意义。我非常执着于界面的想法,我没有想到其他任何事情。var a A 声明了一个恰好实现接口的结构。如果您初始化结构,例如 var a = A{"hello"} 或内联 A{"hello"}, B,这一点就更加明显{2}