每日一博 -- Stringer

开发过程中定义的一些状态机, 在日志打印的时候会打印状态机的值,当查看日志的看到的不直观。

定义enum类型

 1package enum
 2
 3//  go:generate stringer -type=ErrCode
 4
 5type ErrCode int32
 6
 7const (
 8	RequestSuccess   ErrCode = 200 // 成功 通用状态码
 9	InvalidParameter ErrCode = 400 // 失败 通用状态码
10	ServerException  ErrCode = 500 // 服务器级别错误,内部逻辑错误
11)

在main方法打印的时候:

 1package main
 2
 3import (
 4	"fmt"
 5	"github.com/clibing/one-day-learn/enum"
 6)
 7
 8func main() {
 9	var v enum.ErrCode
10	v = enum.InvalidParameter
11	if v != enum.RequestSuccess {
12		fmt.Printf("err code: %v\n", enum.RequestSuccess)
13	}
14}

输入的内容为:

1err code: 200

这是引入 stringer, 帮助文档 https://pkg.go.dev/golang.org/x/tools/cmd/stringer

安装

1go install golang.org/x/tools/cmd/stringer

主要原理String()接口:

1func (t T) String() string

实现: 在定义的枚举文件中定义:

1//go:generate stringer -type=ErrCode

注意//go不能有空格

进入标记注释的同级目录执行如下命令,自动生成

1go generate

or

再次执行main方法输入

1err code: RequestSuccess