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"
}
上面的代码如我所料地工作,并按预期在每个接口(interface)上调用函数。 Go Play
在我的实际代码中,我打算让许多不同的类型实现一个接口(interface)。我怎样才能摆脱 var a A var b B 等并简单地在 slice 中声明它们?即我尝试了以下和其他变体但失败了
for _, v := range []WhatAreYou{a A, b B} {
最佳答案
[]WhatAreYou{A{}, B{}}
感谢 mkopriva,这是正确的。 Composite Literals
现在我对我在这里所做的事情有了更好的理解,我想我明白为什么这个问题也被否决了。这个问题真的没有意义。我对界面的想法非常着迷,没有想到其他任何事情。 var a A 正在声明一个恰好实现接口(interface)的结构。如果您初始化结构,这会更加明显,例如var a = A{"hello"} 或内联 A{"hello"}, B{2}
关于go - 我可以在 slice 中内联声明接口(interface)列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48309029/