Go 编程中的泛型、函子与函数组合
1. 泛型实现选项
在考虑如何实现泛型时,有许多方面需要考虑。以下是一个决策矩阵,可用于评估哪种泛型实现方式最佳。
以 Haskell 的参数多态和 C++ 的特设多态为例:
- Haskell :多态函数对所有类型统一定义,可称为编译时多态。
- C++ :通过替换、虚函数和接口实现动态多态,特定类型的实现是否可行在运行时决定。C++ 模板提供了类似功能,但灵活性在编译时固定,且无动态多态的运行时开销。
Haskell 的类型类允许为不同类型的同一函数定义不同行为,C++ 则使用模板特化和函数重载来实现。
如果 Go 增加泛型支持,会涉及成本和风险,成本可能出现在编译时或运行时。因此,应仔细评估每种方法的优缺点。
为了解决 Go 中重复样板代码的问题,可使用 gen 工具,它更符合 C++/模板方法。虽然使用 gen 会让我们编写更多代码,但能让我们掌控,还可直接获得类似 LINQ 的功能,避免为处理切片编写大量样板代码。
2. 函子的形状
函子是一种代数类型,接受一个值(通常是值列表),并具有一个 map 函数,该函数应用于列表中的每个元素,以生成相同形状的新函子。
以下是一个命令式示例:
ints := []int{1,2,3}
impInts := []int{}
for _, v := range ints {
impInts = append(impInts
超级会员免费看
订阅专栏 解锁全文
5

被折叠的 条评论
为什么被折叠?



