打印Golang列表的枚举名称

dwbf0jvd  于 2023-08-01  发布在  Go
关注(0)|答案(1)|浏览(77)

我有下面的枚举,以及它的字符串函数。当我对一个特定的Animal值使用Println时,会打印出正确的名称。但是当我把它打印成一个完整的列表时,那么只会打印它们的整数值。当我打印动物园列表时,如何打印动物名称?

package main

import (
    "fmt"
)

type Animal int64

const (
    Goat Animal = iota
    Cat
    Dog
)

func (n Animal) String() string {
    switch n {
    case Goat:
        return "Goat"
    case Cat:
        return "Cat"
    case Dog:
        return "Dog"
    }
    return "?"
}

type Group struct {
    a, b Animal
}

type Zoo []Group

func main() {
    var g1,g2 *Group
    g1 = new(Group)
    g1.a = Goat
    g1.b = Cat
    g2 = new(Group)
    g2.a = Dog
    g2.b = Cat

    var z1 Zoo
    z1 = []Group{*g1,*g2}

    fmt.Println("Animal: ", Dog) // prints Dog
    fmt.Println(z1) // prints [{0 1} {3 1}]
}

字符串

wswtfjt7

wswtfjt71#

正如@greedy52所说,ab应该导出(这是正确的答案)。
但是如果你想让它们保持private并有类似的输出,只需在Group上实现String()方法,就像这样:

func (g Group) String() string {
    return fmt.Sprintf("{%s %s}", g.a, g.b)
}

字符串

相关问题