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

时间:2018-01-17 19:56:53

标签: go range slice

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} {

1 个答案:

答案 0 :(得分:0)

[] WhatAreYou {A {},B {}}

这是正确的,感谢mkopriva。 Composite Literals

现在我明白了我在这里做得更好一点我想我明白为什么这个问题也被投票了。这个问题没有多大意义。我对界面的想法非常感兴趣,我没想到别的什么。 var a A声明一个碰巧实现接口的结构。如果你初始化结构,这就更明显了,例如var a = A {“hello”}或内联A {“hello”},B {2}