type Color int const ( Red Color = iota Green Blue )
我们可以在代码中添加以下注释来告诉 "go generate" 命令生成字符串表示形式的代码:
//go:generate stringer -type=Color type Color int const ( Red Color = iota Green Blue )
然后,在终端中执行以下命令:
$ go generate
这将使用 "stringer" 工具自动生成 Color
类型的字符串表示形式。生成的代码将会被保存在 color_string.go
文件中。在生成的代码中,我们可以看到 Color
类型的 String()
方法的实现:
func (i Color) String() string { names := [...]string{"Red", "Green", "Blue"} if i < Red || i > Blue { return fmt.Sprintf("Color(%d)", i) } return names[i] }
生成的代码中包含一个 names
数组,它存储了所有常量的字符串表示形式。String()
方法根据常量的值返回相应的字符串。
在我们的代码中,我们现在可以使用 fmt.Println(Green)
来打印 "Green",而不需要手动编写将 Green
转换为字符串的代码。