golang 代码生成
为什么要写这个
主要还是为了加深自己的理解。第一次接触代码生成的东西,这玩意原来也可以分为各种流派的。比如,用 template
来生成整个代码文件。比如用 stringer
来生成一些辅助方法啥的。注意这个 stringer
不是 https://pkg.go.dev/fmt#Stringer, 而是 https://pkg.go.dev/golang.org/x/tools/cmd/stringer。不得不说,咱们国内的文章啊,你得弄清楚啊,第一个 stringer
是个接口啊,你让接口来生成代码么。
先说说 stringer
为啥要拿这个举例,因为有很多的文章都是这个,所以我们也用这个来弄。
Stringer is a tool to automate the creation of methods that satisfy the fmt.Stringer interface. Given the name of a (signed or unsigned) integer type T that has constants defined, stringer will create a new self-contained Go source file implementing
这个是 https://pkg.go.dev/golang.org/x/tools/cmd/stringer 里面的说明。看起来很麻烦,简单点说就是生成了一个 string 方法。
按照文档说法,这个是适合生成用 const iota
生命的,比如错误代码什么的。
看下面之前最好先看看 https://xie.infoq.cn/article/e7a2d044bafbf474706e441cc 比我写的细致的多。
我们直接上个代码吧,根据官方例子来的
|
|
我们在运行之前,别忘记执行 go generate
命令。然后 run
可以看到输出了字符串。
下面上个实际的列子 http
错误代码
|
|
通过这个就可以看出来,我们只要写好说明,剩下的就全靠生成就好了,从此节省生命 1s。
再说说 template
用 template 一般都是用来生成代码文件,比如数据库生成 model,根据model 生成基础 curd 代码,不过这段,暂时先不弄示例,我还得在学习学习,然后等以后再 实例 的时候在加上来就好了
写在正文之后
距离上次写东西已经过去4个月了,最近几个月不知道自己都在干什么,东西看了不少,输出也不少,但要说有什么可写的,那几乎就是 0 了。今天终于弄出来一个了。接下来 grpc k8s 乱七八糟的都弄起来了。
- 原文作者:M1racle
- 原文链接:https://www.cimple.ink/2021/09/04/golang-code-generate/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。