代码之家  ›  专栏  ›  技术社区  ›  Martin

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

  •  -3
  • Martin  · 技术社区  · 7 年前
    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等,并在片中简单地声明它们?i、 e.我尝试了以下和其他变化,但失败了

    for _, v := range []WhatAreYou{a A, b B} {
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Martin    7 年前

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

    多亏了mkopriva,这是正确的。 Composite Literals

    现在我更明白我在这里做什么了,我想我明白为什么这个问题也被否决了。这个问题真的没有意义。我对界面的想法非常着迷,没有想到其他任何东西。var a a声明一个碰巧实现接口的结构。如果初始化结构,例如var a=a{“hello”}或内联a{“hello”},B{2},这一点更为明显