go - 我可以在 slice 中内联声明接口(interface)列表吗?

标签 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"
}

上面的代码如我所料地工作,并按预期在每个接口(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/

相关文章:

hash - 哈希任意对象的正确方法

go - 在带有多个父项的 go cobra 中添加子命令

php - 当您只需要 2 位数字(01,02 ... 10,11)时如何使用 range()?

excel - VBA错误处理选择动态单元格范围

matlab - 我什么时候可以传递文字 : to a function?

Javascript 将方法链接到递归调用的结果

go - 如何在golang中使用空格距离进行输入

go - 如何在go中正确使用系统调用(Go unsafe.Sizeof与C sizeof的不同结果)

php - 合并 PHP 数组中的重叠范围?

dictionary - 戈朗 : group and sum slice of structs