2014年12月22日 Go生态洞察:Go语言中的代码生成

news2024/9/30 1:27:41

🌷🍁 博主猫头虎(🐅🐾)带您 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语法:

  1. 安装Go的Yacc工具:

    go get golang.org/x/tools/cmd/goyacc
    
  2. 假设有一个名为gopher.y的Yacc输入文件,定义了新语言的语法。要生成实现该语法的Go源文件,通常会这样调用命令:

    goyacc -o gopher.go -p parser gopher.y
    
  3. 要使用go generate来驱动这个过程,在同一目录下的任何一个常规(非生成的).go文件中,添加以下注释:

    //go:generate goyacc -o gopher.go -p parser gopher.y
    
  4. 运行go generate,然后构建和测试:

    $ cd $GOPATH/myrepo/gopher
    $ go generate
    $ go build
    $ go test
    

🚀 stringer工具

stringergolang.org/x/tools仓库中的一个新程序,它自动为整数常量集编写字符串方法。虽然可以单独运行,但它主要是由go generate驱动的。

🧩 示例

设想我们有一些代码,包含定义不同类型药丸的整数常量集:

package painkiller

type Pill int

const (
    Placebo Pill = iota
    Aspirin
    Ibuprofen
    Paracetamol
    Acetaminophen = Paracetamol
)

使用stringer,只需添加一个生成注释,即可让go generatePill类型生成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生态,共同成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1242269.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【excel技巧】excel表格如何转换为word

Excel表格想要转换到word文档中,直接粘贴复制的话,可能会导致表格格式错乱,那么如何转换才能够保证表格不错乱?今天分享两个方法,excel表格转换到word文件。 方法一: 首先打开excel表格,将表格…

CRM系统对企业来说是否必要?

稍微了解过CRM系统的人,应该都知道Salesforce、Zoho CRM、销售易等品牌,这些品牌备受国内外企业的青睐。我们总在强调CRM的作用,但是对中小企业来说,CRM系统有没有必要买? 小编认为,CRM系统是中小企业提升…

ChatGPT可以帮你实现理想工作的梦想

内容来源:0xluffy_eth ChatGPT可以帮你实现理想工作的梦想。 你可以: 找到工作机会 打造最佳简历准备面试 通过这三个简单插件实现你理想工作的保障:[插件链接] 第一步:安装3个插件 → 进入ChatGPT → 点击插件然后选择插件商店…

java jdk 版本切换

java jdk 版本切换 1.JAVA8_HOME ,JAVA17_HOME为切换的两个版,JAVA_HOME来选择 2.path中java_home配置项置顶,必须在蓝色选择中框上方,它是电脑自带的配置,位置太靠上会把我们自己的配置给覆盖掉 3.java -version 查看切换结果

BTS-GAN:基于MRI和条件对抗性网络的乳腺肿瘤计算机辅助分割系统

BTS-GAN: Computer-aided segmentation system for breast tumor using MRI and conditional adversarial networks BTS-GAN:基于MRI和条件对抗性网络的乳腺肿瘤计算机辅助分割系统背景贡献实验方法Parallel dilated convolution module(并行扩展卷积模块…

【C语言】计算实时太阳角度(高度角、方位角),以及使用stm32单片机实时获取时间戳

整体计算方法 在编写该代码的过程中寻找了多篇博文和论文,综合所有文章且按网上的以0时的方位角的0,且随时间累加累加至360度。我修改了博文和论文的一些角度的计算方法。得到一下代码与网站计算的方位角相互验证过,误差不超过1 验证网站 太…

docker安装mysql挂着目录和mysql备份和恢复

第一,镜像拉取,运行镜像并挂载目录,尝试挂bin下,启动不了,不知为啥 docker run --privilegedtrue -itd --namevmysql -p 3306:3306 -v /home/vmysql:/home/vmysql -e MYSQL_ROOT_PASSWORD123456 mysql(图…

计算机视觉的应用19-基于pytorch框架搭建卷积神经网络CNN的卫星地图分类问题实战应用

大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用19-基于pytorch框架搭建卷积神经网络CNN的卫星地图分类问题实战应用。随着遥感技术和卫星图像获取能力的快速发展,卫星图像分类任务成为了计算机视觉研究中一个重要的挑战。为了促进这一…

Leetcode—6.N字形变换【中等】

2023每日刷题&#xff08;三十七&#xff09; Leetcode—6.N字形变换 算法思想 参考k神的题解 实现代码 class Solution { public:string convert(string s, int numRows) {if(numRows < 2) {return s;}vector<string> rows(numRows);int flag -1;int i 0;for(…

FreeSQL 基本使用

FreeSQL连接MySQL 安装 FeeSql相关库 FreeSql 基本库 FreeSql.DbContext FreeSql.Extensions.Linq linq语法扩展库 FreeSql.Provider.Mysql MySQL连接库 新建DbConent.cs public class Base{static string connstr "Data Source127.0.0.1;Port3306;User IDroot;Pa…

S32K144W深度睡眠的问题

电源芯片是一个9到60的宽压芯片。另带一个两轴加表&#xff0c;两个485。 10V正常工作时&#xff0c;电流为26mA 休眠后的电流&#xff0c;只有串口2进行了反初始化&#xff1a; u2_printf(“ENTER LOW-POWER SLEEPDEEP MODE. %d \r\n”,MCU_Freq); //LPUART_DRV_Deinit(INST…

赛桨在结构领域全新探索:机理驱动的无网格结构拓扑优化

自PaddleScience&#xff08;赛桨&#xff09; V1.0于2023年8月正式发布以来&#xff0c;其支持数据和机理驱动的AI for Science求解模式备受工程领域的欢迎。赛桨不仅提供了包括流体、结构、气象等多个领域的基础网络模型&#xff0c;还提供了丰富的生态共建案例。截至目前&am…

数组对象判重最佳实践

数组对象判重最佳实践 赶紧挣钱&#xff0c;回家过年… 1.问题回顾 deviceSelectedRow(row) {this.ElectricalPartList.push(row)}&#xff0c;在此方法中&#xff0c;ElectricalPartList需要多次push进去数据&#xff0c;但是row可能存在重复&#xff0c;如何判重呢&#xff…

easyrecovery免费版2024最新电脑数据恢复工具

easyrecovery免费版是一款操作简便且实用的数据恢复工具&#xff0c;easyrecovery绿色版可以用来恢复各种各样被删除的文件、视频、图片等&#xff1b;EasyRecovery功能非常全面&#xff0c;easyrecovery还可以支持SD卡数据恢复&#xff0c;TF卡等各种存储卡文件恢复(图片、视频…

GeoTrust通配符证书:保护您的网站安全

GeoTrust通配符 SSL证书是一种特殊的 SSL 证书类型&#xff0c;它可以同时为您的主域名及其所有子域提供安全保护。无论您有多少个不同的子域需要保障&#xff0c;都可以通过单一的 GeoTrust 通配符 SSL 证书轻松实现&#xff0c;极大地简化了管理流程并降低了成本。 此外&…

基于.net framework4.0框架下winform项目实现寄宿式web api

首先Nuget中下载包&#xff1a;Microsoft.AspNet.WebApi.SelfHost&#xff0c;如下&#xff1a; 注意版本哦&#xff0c;最高版本只能4.0.30506能用。 1.配置路由 public static class WebApiConfig{public static void Register(this HttpSelfHostConfiguration config){// …

【数据结构】树的基本概念 | 入门树以及二叉树必熟知

树的学习过程中&#xff0c;二叉树比较重要&#xff0c;但是在学习二叉树之前&#xff0c;得先需要了解到一些数的概念。 树的定义 树是一种非线性的数据结构&#xff0c;它是由 n&#xff08;n > 0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它…

兼顾陪读|自由职业者赴美国加州大学尔湾分校访学

I老师出国访学除了提升自己的科研水平外&#xff0c;主要目标还是以陪伴孩子上学为主。最终我们为其落实了排名还不错的加州大学尔湾分校的职位&#xff0c;这对于已多年脱离科研工作岗位&#xff0c;学术背景非常薄弱的I老师来说相当不易。 I老师背景&#xff1a; 申请类型&a…

需求分析BSA法

&#x1f449;BSA法&#xff08;Basic–Satisfier–Attractor&#xff09;是对客户需求进行优先级划分的需求分析方法。该模型体现了需求满足度和客户满意度之间的非线性关系。BSA法将客户需求分为3种类型&#xff0c;分别是基本型需求、满意型需求和兴奋型需求。下面将对每种需…

php一句话木马免杀

php一句话木马免杀 针对于php一句话木马做免杀&#xff1a; 利用php动态函数的特性&#xff0c;将危险函数拆分成字符&#xff0c;最终使用字符串拼接的方式&#xff0c;然后重新拼接&#xff0c;后加括号执行代码&#xff0c;并且可以使用花指令进行包装&#xff0c;如无限i…