🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁
🦄 博客首页——🐅🐾猫头虎的博客🎐
🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐
🌊 《100天精通Golang(基础入门篇)》 🐅 学会Golang语言,畅玩云原生,走遍大小厂~💐
🐅🐾猫头虎建议Go程序员必备技术栈一览表📖:
☁️🐳
Go语言开发者必备技术栈☸️
:
🐹 GoLang | 🌿 Git | 🐳 Docker | ☸️ Kubernetes | 🔧 CI/CD | ✅ Testing | 💾 SQL/NoSQL | 📡 gRPC | ☁️ Cloud | 📊 Prometheus | 📚 ELK Stack
🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🐅🐾🍁🐥
文章目录
- 🐅🐾猫头虎建议Go程序员必备技术栈一览表📖:
- 2014年12月22日 Go生态洞察:Go语言中的代码生成
- 📚 摘要
- 🌟 引言
- 🚀 正文
- 🤖 代码生成的概念
- 🛠️ 工具和示例
- 🌐 Go 1.4中的`go generate`
- 🖥️ 使用`go generate`
- 🚀 `stringer`工具
- 🧩 示例
- 🧭 其他应用
- 📊 总结
- 📚 参考资料
- 🔍 下一篇预告
- 原创声明
-
原创作者: 猫头虎
-
作者wx: Libin9iOak
-
作者公众号: 猫头虎技术团队
2014年12月22日 Go生态洞察:Go语言中的代码生成
📚 摘要
大家好,我是猫头虎,今天我们来探讨Go 1.4版本中引入的一个强大的新功能——代码生成。这个功能不仅展示了通用计算的强大之处,也为Go语言的软件工程实践带来了全新的可能性。让我们一起深入了解代码生成的魔力吧!
🌟 引言
通用计算的一个重要属性——图灵完备性——意味着计算机程序可以编写计算机程序。这是一个强大的概念,但却没有得到应有的重视。现在,随着Go 1.4的发布,我们得以在Go语言中更方便地实现这一点。
🚀 正文
🤖 代码生成的概念
代码生成指的是一个程序输出另一个程序的源代码。这是软件工程中的一个重要元素,常见于编译器的定义中。例如,go test
命令就是通过扫描要测试的包,写出为该包定制的测试装置的Go程序,然后编译并运行它。
🛠️ 工具和示例
- Yacc:读取语法描述并输出解析该语法的程序。
- Protocol Buffer编译器:读取接口描述并输出结构定义、方法等支持代码。
🌐 Go 1.4中的go generate
Go 1.4引入了一个新命令go generate
,通过扫描Go源代码中的特殊注释来识别并运行通用命令。值得注意的是,go generate
并不是go build
的一部分。它没有依赖分析,并且在运行go build
之前必须显式运行。它旨在被Go包的作者使用,而不是其客户端。
🖥️ 使用go generate
例如,使用Go的Yacc工具生成Yacc语法:
-
安装Go的Yacc工具:
go get golang.org/x/tools/cmd/goyacc
-
假设有一个名为
gopher.y
的Yacc输入文件,定义了新语言的语法。要生成实现该语法的Go源文件,通常会这样调用命令:goyacc -o gopher.go -p parser gopher.y
-
要使用
go generate
来驱动这个过程,在同一目录下的任何一个常规(非生成的).go
文件中,添加以下注释://go:generate goyacc -o gopher.go -p parser gopher.y
-
运行
go generate
,然后构建和测试:$ cd $GOPATH/myrepo/gopher $ go generate $ go build $ go test
🚀 stringer
工具
stringer
是golang.org/x/tools
仓库中的一个新程序,它自动为整数常量集编写字符串方法。虽然可以单独运行,但它主要是由go generate
驱动的。
🧩 示例
设想我们有一些代码,包含定义不同类型药丸的整数常量集:
package painkiller
type Pill int
const (
Placebo Pill = iota
Aspirin
Ibuprofen
Paracetamol
Acetaminophen = Paracetamol
)
使用stringer
,只需添加一个生成注释,即可让go generate
为Pill
类型生成String
方法。输出默认写入pill_string.go
。
🧭 其他应用
Go
语言中已经有许多其他使用go generate
的实例,包括在unicode
包中生成Unicode表、在encoding/gob
中创建数组的编码和解码方法等。
📊 总结
go generate
虽然没有提供Make或其他构建机制无法做到的功能,但它无需额外安装即与go
工具一起提供,并且很好地融入了Go生态系统。请创造性地使用go generate
,它鼓励实验。本文已被猫头虎的Go生态洞察专栏收录,详情点击这里。
📚 参考资料
- Rob Pike. Generating code.
- Go 1.4 Release Notes.
- Yacc.
🔍 下一篇预告
下一篇文章,我们将探讨Go语言中的另一个有趣话题——全球首个Go语言黑客马拉松——Gopher Gala。敬请期待!
原创声明
======= ·
-
原创作者: 猫头虎
-
作者wx: Libin9iOak
-
作者公众号: 猫头虎技术团队
学习 | 复习 | Go生态 |
---|---|---|
✔ | ✔ | ✔ |
本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。
作者保证信息真实可靠,但不对准确性和完整性承担责任。
未经许可,禁止商业用途。
如有疑问或建议,请联系作者。
感谢您的支持与尊重。
点击
下方名片
,加入IT技术核心学习团队。一起探索科技的未来,洞察Go生态,共同成长。