首页 > 其他分享 >golang工具值generate

golang工具值generate

时间:2023-09-15 09:44:49浏览次数:35  
标签:CODE OK ERR ErrCode golang go 工具 generate

 

示例:

大家经常碰到命名错误码、状态码的同时,又要同步写码对应的翻译,有没有感觉很无聊。这里举一个例子:

package main
​
import "fmt"
​
// 定义错误码
const (
   ERR_CODE_OK             = 0 // OK
   ERR_CODE_INVALID_PARAMS = 1 // 无效参数
   ERR_CODE_TIMEOUT        = 2 // 超时
)
​
// 定义错误码与描述信息的映射
var mapErrDesc = map[int]string{
   ERR_CODE_OK:             "OK",
   ERR_CODE_INVALID_PARAMS: "无效参数",
   ERR_CODE_TIMEOUT:        "超时",
}
​
// 根据错误码返回描述信息
func GetDescription(errCode int) string {
   if desc, exist := mapErrDesc[errCode]; exist {
      return desc
   }
​
   return fmt.Sprintf("error code: %d", errCode)
}
​
func main() {
   fmt.Println(GetDescription(ERR_CODE_OK))
}

 

这是一种重复性操作,没有什么技术含量,另外很可能忘记写映射。我只想写错误码,对应的描述信息直接用注释里的就行,所以这里介绍一下对应的工具。

go generate

go有很多工具,大家可以通过go命令查看。

go generate是 Go 自带的工具。使用命令go generate执行。go generate是利用源代码中的注释工作的。格式如下:

//go:generate command arg1 arg2

这样在同一个目录下执行命令go generate就会自动运行命令command arg1 arg2command可以是在PATH中的任何命令,应用非常广泛。配合stringer命令可以为给定类型生成String方法,就可以实现我们的想法。

安装stringer

stringer不是Go自带工具,需要手动安装。执行如下命令即可

go get golang.org/x/tools/cmd/stringer

使用

有两种执行方案,

一种是在errcode中,增加注释//go:generate stringer -type ErrCode -linecomment

另一种是直接命令行执行stringer -type ErrCode -linecomment

执行完毕会发现自动生成新文件

 

关于stringer的命令,大家可以通过stringer -h查看

 

注意点:

  1. go:generate前面只能使用//注释,注释必须在行首,前面不能有空格且//go:generate之间不能有空格!!!
  2. go:generate可以在任何 Go 源文件中,最好在类型定义的地方。

 

自动化:

  makefile 中:

all:
    go generate && go build .

 

demo文件: errcode.go源文件,errcode_test.go测试文件 errcode_string.go生成文件

errcode.go

package errcode

// ErrCode 表示错误码
type ErrCode int

//go:generate stringer -type ErrCode -linecomment -output code_string.go
// -type指定类型
// -output code_string.go 指定生成的文件名称
// -linecomment 将注释名称作为错误描述
// 定义错误码 const ( ERR_CODE_OK ErrCode = 0 // OK ERR_CODE_INVALID_PARAMS ErrCode = 1 // 无效参数 ERR_CODE_TIMEOUT ErrCode = 2 // 超时 // ... )

errcode_test.go

package errcode

import "testing"

func TestCode(t *testing.T) {
    cases := []struct {
        errCode ErrCode
        expect  string
    }{
        {ERR_CODE_OK, "OK"},
        {ERR_CODE_INVALID_PARAMS, "无效参数"},
        {ERR_CODE_TIMEOUT, "超时"},
    }

    for _, testCase := range cases {
        if testCase.errCode.String() != testCase.expect {
            t.Errorf("error code %d description inconsistant actual:%s expect:%s", int(testCase.errCode), testCase.errCode, testCase.expect)
        }
    }
}

 

errcode_string.go

// Code generated by "stringer -type ErrCode -linecomment"; DO NOT EDIT.

package errcode

import "strconv"

const _ErrCode_name = "OK无效参数超时"

var _ErrCode_index = [...]uint8{0, 2, 14, 20}

func (i ErrCode) String() string {
    if i < 0 || i >= ErrCode(len(_ErrCode_index)-1) {
        return "ErrCode(" + strconv.FormatInt(int64(i), 10) + ")"
    }
    return _ErrCode_name[_ErrCode_index[i]:_ErrCode_index[i+1]]
}

 

执行测试:

go generate 
or
go generate ./...


go test

 

标签:CODE,OK,ERR,ErrCode,golang,go,工具,generate
From: https://www.cnblogs.com/xingxia/p/go_generate.html

相关文章

  • 个人微信API对接-Golang版本
    golang版个人微信号API,突破登录限制,类似开发公众号一样,开发个人微信号微信机器人......
  • Golang字符串拼接性能
    问题引入Golang中的string类型是只读且不可变的。因此通过循环字符串切片拼接字符串的方式会导致大量的string创建、销毁和内存分配解决方法通过bytes.Buffer优化使用varbsbytes.Buffer存放最终拼接好的字符串,一定程度上避免了string每进行一次拼接都重新申请内存空间的问题但依......
  • 简单好用的文件清理工具:ccleaner
    ccleaner是一款简单好用的文件清理工具。ccleaner可以清除系统中的所有垃圾文件,腾出硬盘空间,保护系统隐私。ccleaner体积小、运行快,同时还可以对注册表进行扫描。CCleaner特色功能1、ccleaner可以清理临时文件夹、回收站的里的垃圾文件,还可以扫描清理注册表里的垃圾项;2、ccleane......
  • 构建工具gulp浅谈
    gulp.js-基于流(stream)的自动化构建工具引言:​ js作为一门脚本语言,在较早时候,只能通过<script>标签插进html去运行,单个的js文件离开了html就没有了意义。​ 如果一个网站功能很多,要按照功能划分写十几个js文件,那么就要插入十几个<scriptsrc="">去引那些js文件,还需要注意顺......
  • GO语言集成开发工具环境-JetBrains GoLand 2023 Mac+win版
    JetBrainsGoLand是一款由JetBrains开发的集成开发环境(IDE),专门用于Go语言的开发。它提供了丰富的功能和工具,帮助开发者更高效地编写、调试和测试Go代码。→→↓↓载GoLand2023mac/win版 首先,GoLand具有强大的代码编辑功能。它支持代码自动补全、语法高亮、代码导航等功能,使......
  • 流量分析工具 NetCap
    项目地址:https://github.com/dreadl0ck/netcap/tree/masterTheNetcap(NETworkCAPture)frameworkefficientlyconvertsastreamofnetworkpacketsintoplatformneutraltype-safestructuredauditrecordsthatrepresentspecificprotocolsorcustomabstractions......
  • C# 性能诊断工具 dotnet-counters 的使用
    创建.NET程序Dump的几种姿势下载dotnet-counters工具简介dotnet-counters是一个性能监视工具,用于初级运行状况监视和性能调查。它通过EventCounterAPI观察已发布的性能计数器值。例如,可以快速监视CUP使用情况或.NETCore应用程序中的异常率等指标安装通过nuget包安装:......
  • Unicode与中文转换工具类
    在上一家公司做Android注入时,如果注入中文会有问题,需要将中文转换为unicode码注入,在网上查了一下转换工具类,大多数都是如下的解决方案: publicclassCharacterSetToolkit{/**CreatesanewinstanceofCharacterSetToolkit*/publicCharacterSetToolkit(){......
  • 工程管理之二:日志初始化工具
    现在公司工作中使用的日志工具是slf4j+logback。初始化工具类实现如下:publicclassLogUtil{ privatestaticfinalorg.slf4j.LoggerLOGGER=LoggerFactory.getLogger(LogUtil.class); publicstaticfinalString__CONF_DIR__="conf"; publicstaticvoidloadLogback......
  • 好用的数据挖掘工具有哪些,数据挖掘怎么做,数据挖掘有什么?
    好用的数据挖掘工具有以下几种:1.Python:Python是一种流行的编程语言,有丰富的数据挖掘库和工具包,如NumPy、Pandas、Scikit-learn、TensorFlow等。它提供了强大的数据处理和分析能力,适合各种数据挖掘任务。2.R语言:R语言是专门用于统计分析和数据挖掘的编程语言,拥有广泛的统计和......