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

111 | Go编程模式:Map-Reduce

健壮版的Generic Filter
健壮版的Generic Reduce
健壮版的Generic Map
简单版 Generic Map
各种自定义的统计示例
相关的Reduce、Filter函数
员工信息
MapStrToInt
MapStrToStr
后记
泛型Map-Reduce
业务示例
Filter
Reduce
Map
Go 编程模式:Map-Reduce

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

你好,我是陈皓,网名左耳朵耗子。
这节课,我们来学习一下函数式编程中非常重要的 Map、Reduce、Filter 这三种操作。这三种操作可以让我们轻松灵活地进行一些数据处理,毕竟,我们的程序大多数情况下都在倒腾数据。尤其是对于一些需要统计的业务场景来说,Map、Reduce、Filter 是非常通用的玩法。
话不多说,我们先来看几个例子。

基本示例

Map 示例

在下面的程序代码中,我写了两个 Map 函数,这两个函数需要两个参数:
一个是字符串数组 [] string,说明需要处理的数据是一个字符串;
另一个是一个函数 func(s string) string 或 func(s string) int。
func MapStrToStr(arr []string, fn func(s string) string) []string {
var newArray = []string{}
for _, it := range arr {
newArray = append(newArray, fn(it))
}
return newArray
}
func MapStrToInt(arr []string, fn func(s string) int) []int {
var newArray = []int{}
for _, it := range arr {
newArray = append(newArray, fn(it))
}
return newArray
}
整个 Map 函数的运行逻辑都很相似,函数体都是在遍历第一个参数的数组,然后,调用第二个参数的函数,把它的值组合成另一个数组返回。
因此,我们就可以这样使用这两个函数:
var list = []string{"Hao", "Chen", "MegaEase"}
x := MapStrToStr(list, func(s string) string {
return strings.ToUpper(s)
})
fmt.Printf("%v\n", x)
//["HAO", "CHEN", "MEGAEASE"]
y := MapStrToInt(list, func(s string) int {
return len(s)
})
fmt.Printf("%v\n", y)
//[3, 4, 8]
可以看到,我们给第一个 MapStrToStr() 传了功能为“转大写”的函数,于是出来的数组就成了全大写的,给MapStrToInt() 传的是计算长度,所以出来的数组是每个字符串的长度。
我们再来看一下 Reduce 和 Filter 的函数是什么样的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了Go编程模式中的Map-Reduce,以及其在函数式编程中的重要性。作者首先介绍了Map、Reduce、Filter这三种操作的基本示例,通过示例代码展示了它们的使用方法和作用。接着,作者给出了一些业务示例,展示了这些操作在实际业务场景中的应用。特别是针对员工信息的统计示例,更加直观地展示了Map、Reduce、Filter的实际应用。此外,文章还介绍了泛型Map-Reduce的实现,虽然Go语言目前不支持泛型,但作者通过使用`interface{}`和`reflect`来实现了一个简单的泛型Map函数。最后,作者提醒读者反射是运行时的事,如果类型出问题就会有运行时的错误。整体来说,本文通过丰富的示例和详细的解释,帮助读者了解了Map-Reduce的基本概念和在Go语言中的应用,同时也展示了泛型Map-Reduce的实现方式。文章内容丰富,适合对Go语言编程感兴趣的读者阅读。文章中还介绍了健壮版的Generic Map、Reduce和Filter的代码实现,展示了对泛型的处理方式,同时也指出了使用反射会导致性能问题。总的来说,本文对Go语言中Map-Reduce的应用和泛型处理进行了详细介绍,对于想要深入了解Go语言编程模式的读者具有一定的参考价值。

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

全部留言(4)

  • 最新
  • 精选
  • 北国骑士
    所以我觉得用go写业务逻辑真的是件很sb的事情
    2021-04-16
    1
    11
  • 拉欧
    就是因为go最初不支持泛型,所以每个go框架都要搞一堆的代码生成器来生成重复代码,恶心的不要不要的
    2022-04-30
    1
    2
  • 通俗易懂
    2021-02-18
    1
  • Refrain
    verifyFuncSignature(fn, elemType, nil) 为什么要传一个空值呢? outType := types[len(types)-1] 这个地方outType必然是空值
    2021-02-05
    1
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部