主要观点:
- 作者在 Go 语言中构建可复用代码以实现一种模式,虽需与类型系统“斗争”但最终成功。
- 通过将参数列表打包进结构体,可使该模式对不同函数的参数集通用。
- 介绍了在 Go 中实现“暗启动”模式的过程及遇到的问题,包括不同函数参数不同导致的代码不优雅等。
- 对比了其他语言(如 Clojure、Haskell、TypeScript)在处理类似问题时的解决方案,最终给出 Go 的解决方案,即使用结构体表示有限类型列表。
关键信息:
- “暗启动”模式代码示例,不同函数使用该模式但参数不同。
- 尝试抽象“暗启动”模式的代码及存在的问题,如每次调用需创建新闭包等。
- 其他语言在处理类似问题时的特点,如 Clojure 的
apply
函数、Haskell 的类型系统、TypeScript 的变参元组类型。 - Go 的解决方案,通过结构体表示有限类型列表,将相关成员封装进
Executor
接口等。
重要细节:
- Go 中需重写
oldWay
/newWay
函数以接受有限使用的结构体作为参数。 - 在 Go 的解决方案中,不同函数使用不同的有限使用结构体来传递参数。
- 给出了 Go 中具体的“暗启动”相关函数的实现代码,如
GetImportantData
等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。