我可以在切片中内联声明接口列表吗?


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}

最新更新