【发布时间】:2018-06-26 19:14:16
【问题描述】:
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"
}
上面的代码按预期工作,并按预期调用每个接口上的函数。 Go Play
在我的实际代码中,我打算让许多不同的类型实现一个接口。我怎样才能摆脱 var a A var b B 等并简单地在切片中声明它们?即我尝试了以下和其他变体但失败了
for _, v := range []WhatAreYou{a A, b B} {
【问题讨论】:
-
[]WhatAreYou{A{}, B{}}golang.org/ref/spec#Composite_literals -
谢谢。现在我已经被展示出来了,这似乎很明显。感谢您提供的链接正是我试图谷歌但没有想到短语复合文字
-
为什么这些不赞成 - 我看到一个带有工作代码示例的简洁问题。只是做一个初学者级别的问题并不违反规则,对吧?
-
@shful:我也想知道,但我得到了答案,我要学习 golang,所以我顺其自然。想知道我可以做些什么来改进,但我不会因为几票反对而失眠。