开发过程中定义的一些状态机, 在日志打印的时候会打印状态机的值,当查看日志的看到的不直观。
定义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
评论