Go 服务开发高手课
徐逸
头部大厂资深 Go 技术专家、前腾讯资深工程师
1127 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已更新 19 讲/共 28 讲
开篇词 (1讲)
Go 服务开发高手课
15
15
1.0x
00:00/00:00
登录|注册

18|函数设计:重复编写相似函数,怎样实现逻辑复用?

你好,我是徐逸。
上节课我们学习了如何使用设计模式,来提升我们代码的可维护性。不过除了设计模式之外,Go 语言本身所提供的反射和泛型特性,同样是我们手中的得力工具。借助这些特性,我们能够达成逻辑复用的目标,避免重复编写那些功能相近的函数,让代码更加简洁。
今天,我就以实现一个求最大值的函数为例,在优化这个函数实现的过程中,带你了解反射和泛型知识。

案例准备

假设我们已经有了如下的函数,用于求取两个整数间的最大值。
func MaxInt(a, b int) int {
if a > b {
return a
}
return b
}
现在,如果我们想要实现一个类似的函数,来求取两个浮点数的最大值,我们可能会像下面这样增加一个新的函数。
func MaxFloat32(a, b float32) float32 {
if a > b {
return a
}
return b
}
不过,一旦我们进一步拓展需求,需要针对 int64、float64 等很多其它数值类型获取最大值,这种不断添加新函数的方式,会导致代码中出现大量逻辑极为相似的函数。这不仅会使代码库变得臃肿不堪,还会极大地增加代码维护的成本。
那么是否存在一种方法,能够让我们避免重复编写逻辑相似的函数,而是在一个统一的函数里,就可以实现对所有数值类型求最大值的功能呢?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. 反射机制能够在程序运行时操作任意类型的对象,包括调用对象的方法和访问属性,通过 reflect 包提供的功能实现对象类型转换、变量值设置和动态方法调用。 2. 反射机制可以实现支持多种数值类型的最大值函数,但存在类型安全、性能和代码可读性问题。 3. 泛型允许在编写代码时使用类型参数,使代码能够适用于多种不同类型,而无需为每种类型单独编写特定的实现。 4. Golang 的泛型机制在编译阶段,会基于传入的实际参数类型,实例化出具体的函数,有效规避了运行时可能出现的类型安全隐患。 5. 泛型减少了对大量反射方法的调用,因此在性能上更具优势,提高了代码的可读性。 6. 反射适合处理不同类型执行差异化逻辑,而泛型适合处理不同类型对应的实现逻辑一致的情况。 7. 反射和泛型知识是编写代码时实现逻辑复用的重要工具,可以根据具体场景选择合适的机制来提高代码的简洁性和可维护性。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 服务开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)