iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >go generate命令怎么使用
  • 181
分享到

go generate命令怎么使用

2023-07-05 01:07:53 181人浏览 八月长安
摘要

本篇内容介绍了“Go generate命令怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!“go generate”命令的作用是在编译

本篇内容介绍了“Go generate命令怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

“go generate”命令的作用是在编译前自动化生成某类代码;它常用于自动生成代码,它可以在代码编译之前根据源代码生成代码。当运行“go generate”命令时,它将扫描与当前包相关的源代码文件,找出所有包含“//go:generate”的特殊注释,提取并执行该特殊注释后面的命令。

Go语言提供了一系列强大的工具,灵活使用这些工具,能够让我们的项目开发更加容易,工具集包含如下。

bug         start a bug reportbuild       compile packages and dependenciesclean       remove object files and cached filesdoc         show documentation for package or symbolenv         print Go environment infORMationfix         update packages to use new apisfmt         gofmt (reformat) package sourcesgenerate    generate Go files by processing sourceget         add dependencies to current module and install theminstall     compile and install packages and dependencieslist        list packages or modulesmod         module maintenancerun         compile and run Go programtest        test packagestool        run specified go toolversion     print Go versionvet         report likely mistakes in packages

工具的源码位于$GOPATH/src/cmd/internal,本篇文章主要讨论Go工具generate。

go语言自动化工具

go generate命令是在Go语言 1.4 版本里面新添加的一个命令,常用于自动生成代码,它可以在代码编译之前根据源代码生成代码。当运行go generate时,它将扫描与当前包相关的源代码文件,找出所有包含"// go:generate"的注释语句,提取并执行该注释后的命令,命令为可执行程序。该过程类似于调用执行shell脚本。

使用方法

  • 添加特殊注释

//go:generate command argument...

  • 执行generate命令

$ go generate [-run regexp] [-n] [-v] [-x] [build flags] [file.go... | packages]

注意事项

  • 该特殊注释必须包含在.go源码文件中。

  • 每个源码文件可以包含多个generate特殊注释。

  • go generate不会被类似go build,go get,go test等命令触发执行,必须由开发者显式使用。

  • 命令执行是串行的,如果出错,后续命令不再执行。

  • 特殊注释必须以“//go:generate”开头,双斜线之后没有空格。

  • 执行命令必须是系统PATH(echo $PATH)下的可执行程序。

使用示例

package mainimport "fmt"//go:generate echo GoGoGo!//go:generate go run main.go//go:generate echo $GOARCH $GOOS $GOFILE $GOLINE $GOPACKAGEfunc main() { fmt.Println("go rum main.go!")}

执行go generate命令

$ go generateGoGoGo!go rum main.go!amd64 darwin main.go 7 main

为枚举常量实现String方法

看完上述generate的简单介绍,可能读者并没有感受到该工具的强大之处,小菜刀提供一个该工具的经典应用场景:为枚举常量实现String方法。

这里需要提及官方的另外一个工具stringer,它可以自动为整数常量集编写String()方法。由于stringer并不在Go官方发行版的工具集里,我们需要自行安装,执行如下命令。

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

这里引用stringer文档中的一个示例。代码如下,其定义了一组不同Pill类型的整数常量。

package painkillertype Pill intconst (    Placebo Pill = iota    Aspirin    Ibuprofen    Paracetamol    Acetaminophen = Paracetamol)

为了进行调试或者其他原因,我们希望这些常量能够打印出来,这意味着Pill要有一个带有签名的方法。

func (p Pill) String() string

要实现它,非常简单。

func (p Pill) String() string {    switch p {    case Placebo:        return "Placebo"    case Aspirin:        return "Aspirin"    case Ibuprofen:        return "Ibuprofen"    case Paracetamol: // == Acetaminophen        return "Paracetamol"    }    return fmt.Sprintf("Pill(%d)", p)}

试想,如果我们的Pill名单里新增了一批药品名,每次增加或修改药品名,在相应的签名函数里,也都需要进行更改。这样岂不是很麻烦且很可能遗漏或出错?这时,我们可以通过 go generate + stringer的方案解决该问题。很简单,只需在定义Pill的代码中,增加一句注释语句即可。

//go:generate stringer -type=Pill

上面的命令,代表运行stringer工具来为Pill类型生成String方法,默认输出到pill_string.go文件中,执行如下。

$ go generate$ cat pill_string.go// Code generated by stringer -type Pill pill.go; DO NOT EDIT.package painkillerimport "fmt"const _Pill_name = "PlaceboAspirinIbuprofenParacetamol"var _Pill_index = [...]uint8{0, 7, 14, 23, 34}func (i Pill) String() string {    if i < 0 || i+1 >= Pill(len(_Pill_index)) {        return fmt.Sprintf("Pill(%d)", i)    }    return _Pill_name[_Pill_index[i]:_Pill_index[i+1]]}

这样,每次我们对Pill类型有修改时,我们所需要做的就是运行以下语句即可。

$ go generate

当然,你要是觉得这样麻烦,或者担心忘记执行generate语句。那么,可以将go generate语句写入Makefile之中,置于go build命令之前,实现代码生成与编译的自动化。

值得一提的是,在Go源码文档中,大量采用了go generate+stringer的方案实现对枚举常量的String方法。在小菜刀本机Go 1.14.1的源码下,一共有23处使用,具体如下。

go generate命令怎么使用

“go generate命令怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: go generate命令怎么使用

本文链接: https://www.lsjlt.com/news/348897.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • go generate命令怎么使用
    本篇内容介绍了“go generate命令怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!“go generate”命令的作用是在编译...
    99+
    2023-07-05
  • 活用go generate命令打造高效代码
    go generate 命令允许在构建时生成代码,以优化开发和提高代码质量。步骤如下:创建包含命令的 go.generate 文件。使用 -generate 标志注册 generate ...
    99+
    2024-04-08
    java php
  • Go语言中go fmt命令怎么用
    这篇文章主要为大家展示了“Go语言中go fmt命令怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Go语言中go fmt命令怎么用”这篇文章吧。go fmt命令主要是用来帮你格式化所写好的...
    99+
    2023-06-25
  • Go语言中go install命令怎么用
    小编给大家分享一下Go语言中go install命令怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!go install编译并安装代码包,对于库,会生成目标库...
    99+
    2023-06-25
  • Go语言中go build命令怎么用
    这篇文章主要介绍了Go语言中go build命令怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。go build 用于测试编译多个包或一个main包2. build命令编...
    99+
    2023-06-25
  • dos命令行choice命令怎么使用
    在Windows系统中,choice命令用于让用户在几个选项中做出选择。下面是choice命令的基本语法和用法: choice [/...
    99+
    2024-03-01
    dos
  • Linux的blkid命令命令怎么使用
    这篇文章主要介绍“Linux的blkid命令命令怎么使用”,在日常操作中,相信很多人在Linux的blkid命令命令怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux的blkid命令命令怎么使用...
    99+
    2023-06-28
  • jstat命令怎么使用
    这篇文章主要介绍了jstat命令怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇jstat命令怎么使用文章都会有所收获,下面我们一起来看看吧。jstat的用法:jstat [ gene...
    99+
    2023-06-27
  • 怎么使用git命令
    今天小编给大家分享一下怎么使用git命令的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。安装Git在开始使用Git之前,您需要...
    99+
    2023-07-05
  • VBoxManage命令怎么使用
    VBoxManage命令是VirtualBox软件自带的命令行工具,用于管理虚拟机的各种操作。以下是VBoxManage命令的常用用...
    99+
    2023-09-13
    VBoxManage
  • ipvsadm命令怎么使用
    ipvsadm命令是用于管理Linux Virtual Server (LVS) 的工具。它可以用于设置和管理IP负载均衡。使用ip...
    99+
    2023-09-14
    ipvsadm
  • expr命令怎么使用
    本篇内容介绍了“expr命令怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!expr命令可以实现数值运算、数值或字符串比较、字符串匹配...
    99+
    2023-06-28
  • Git命令怎么使用
    今天小编给大家分享一下Git命令怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。常用 Git 命令清单。几个专用名词的...
    99+
    2023-06-29
  • tracert命令怎么使用
    这篇文章主要介绍“tracert命令怎么使用”,在日常操作中,相信很多人在tracert命令怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”tracert命令怎么使用”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-07-02
  • vmstate命令怎么使用
    今天小编给大家分享一下vmstate命令怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1。 使用vmstat使用前我...
    99+
    2023-07-02
  • cmd命令怎么使用
    这篇文章主要介绍“cmd命令怎么使用”,在日常操作中,相信很多人在cmd命令怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”cmd命令怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!10个很酷...
    99+
    2023-07-01
  • pgrep命令怎么使用
    本篇内容介绍了“pgrep命令怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!pgrep 是通过程序的名字来查询进程的工具,一般是用来...
    99+
    2023-06-27
  • envsubst命令怎么使用
    这篇文章主要介绍“envsubst命令怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“envsubst命令怎么使用”文章能帮助大家解决问题。0 | 是什么envsubst 缩写来自于 envi...
    99+
    2023-07-06
  • 怎么使用Laravel命令
    这篇文章主要介绍“怎么使用Laravel命令”,在日常操作中,相信很多人在怎么使用Laravel命令问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Laravel命令”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-25
  • mkfs命令怎么使用
    这篇文章主要介绍了mkfs命令怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mkfs命令怎么使用文章都会有所收获,下面我们一起来看看吧。mkfs命令用于在设备上(通常为硬盘)创建Linux文件系统。mk...
    99+
    2023-06-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作