You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在打印Go语言Zoo列表时输出Animal枚举的名称?

解决打印Zoo列表时输出Animal枚举名称的问题

问题出在两个关键点:

  1. Group结构体的a、b是未导出的小写字段,fmt包无法访问私有字段的类型方法,只能输出其底层整数值;
  2. Group或Zoo没有自定义格式化方法,导致切片打印时使用默认的结构体输出格式。

下面提供两种实用解决方案:

方案一:导出Group的字段

将Group中的小写字段改为大写(Go语言中大写开头的字段为导出字段),这样fmt就能调用Animal的String()方法输出枚举名称:

type Group struct {
    A, B Animal // 改为导出字段
}

修改后运行代码,fmt.Println(z1)会输出:[{Goat Cat} {Dog Cat}]

方案二:给Group实现String()方法

如果不想导出字段,可以给Group类型自定义String()方法,手动格式化输出两个Animal的名称:

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

这种方式利用包内访问权限,直接调用私有字段的String()方法,打印z1时同样会输出正确的枚举名称。

可选:给Zoo实现自定义格式化(进阶)

如果需要更定制化的切片输出格式,可以给Zoo类型实现String()方法:

import "strings"

func (z Zoo) String() string {
    var sb strings.Builder
    sb.WriteString("[")
    for idx, group := range z {
        if idx != 0 {
            sb.WriteString(" ")
        }
        sb.WriteString(fmt.Sprintf("{%s %s}", group.a, group.b))
    }
    sb.WriteString("]")
    return sb.String()
}

内容的提问来源于stack exchange,提问作者R71

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 23:33:03