左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家
180940 人已学习
新⼈⾸单¥98
登录后,你可以任选6讲全文学习
课程目录
已完结/共 119 讲
左耳听风
15
15
1.0x
00:00/00:00
登录|注册

112 | Go编程模式:Go Generation

执行go generate命令
go:generate注释
替换模板生成代码
参数
占位符
示例
示例
修改代码
示例
转型操作
示例
Go Generate注释
Filter模板
生成代码
函数生成脚本
函数模板
在Go中使用类似技术
C++的Template
Reflection
Type Assert
泛型编程解决实际问题
螺丝刀适配不同类型的螺丝
泛型编程解决问题
类型不同导致复制
第三方工具
新版Filter
Go Generator
他山之石
Go语言的类型检查
现实中的类比
编程泛型问题
参考文章
Go 编程模式:Go Generation

该思维导图由 AI 生成,仅供参考

你好,我是陈皓,网名左耳朵耗子。
这节课,我们来学习一下 Go 语言的代码生成的玩法。
Go 语言的代码生成主要还是用来解决编程泛型的问题。泛型编程主要是解决这样一个问题:因为静态类型语言有类型,所以,相关的算法或是对数据处理的程序会因为类型不同而需要复制一份,这样会导致数据类型和算法功能耦合。
我之所以说泛型编程可以解决这样的问题,就是说,在写代码的时候,不用关心处理数据的类型,只需要关心相关的处理逻辑。
泛型编程是静态语言中非常非常重要的特征,如果没有泛型,我们就很难做到多态,也很难完成抽象,这就会导致我们的代码冗余量很大。

现实中的类比

为了帮你更好地理解,我举个现实当中的例子。我们用螺丝刀来做打比方,螺丝刀本来只有一个拧螺丝的作用,但是因为螺丝的类型太多,有平口的,有十字口的,有六角的……螺丝还有不同的尺寸,这就导致我们的螺丝刀为了要适配各种千奇百怪的螺丝类型(样式和尺寸),也是各种样式的。
而真正的抽象是,螺丝刀不应该关心螺丝的类型,它只要关注自己的功能是不是完备,并且让自己可以适配不同类型的螺丝就行了,这就是所谓的泛型编程要解决的实际问题。

Go 语方的类型检查

因为 Go 语言目前并不支持真正的泛型,所以,只能用 interface{} 这样的类似于 void* 的过度泛型来玩,这就导致我们要在实际过程中进行类型检查。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何在Go语言中利用代码生成技术解决泛型编程的问题。作者首先强调了泛型编程的重要性,并通过螺丝刀类比说明了其作用。接着,作者介绍了在Go语言中使用 `interface{}` 进行类型检查的技术,包括 Type Assert 和 Reflection。然后,文章对比了C++中的模板技术,并提出了在Go中使用代码生成技术的解决方案。最后,详细介绍了使用Go Generator进行代码生成的步骤,包括函数模板、生成脚本和生成代码的示例。通过本文,读者可以了解到在Go语言中如何利用代码生成技术来解决泛型编程的问题,以及如何使用Go Generator进行代码生成。文章还提到了第三方工具,为读者提供了更多便利。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《左耳听风》
新⼈⾸单¥98
立即购买
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • 他山之石可以攻玉,语言只是工具,那些编程思想才是真正重要的,皓叔强
    2021-02-18
    14
  • 林万程
    现在有泛型了
    2022-04-21
    5
  • Steven
    这个玩法,有点牛逼了,开拓视野啊。感觉很nice,写一个模版,如果模版好,后期根据模版直接批量生产业务代码,简单、干净而且还可以语义化。配置生产代码的方式写代码。
    2022-10-17归属地:上海
  • 顺势而为
    低代码的背后,应该是这些脚本工具吧?
    2022-08-16归属地:广东
  • 方勇(gopher)
    代码生成器,目前在做微服务troubleshooting,策略配置基于此模式!
    2021-12-23
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部