文章

猫鱼周刊 vol. 013 Go 的函数式编程

关于本刊

这是猫鱼周刊的第 14 期,本系列每周日更新,主要内容为每周收集内容的分享,同时发布在

博客:阿猫的博客-猫鱼周刊

RSS:猫鱼周刊

邮件订阅:猫鱼周刊

微信公众号:猫兄的和谐号列车

Discord:猫兄的和谐号高铁

私信:leslieleung@pm.me

文章

函数式编程初探

原文链接

出自阮一峰老师之笔,一篇概述性的文章,介绍了函数式编程的定义、特点等。

教程:上手泛型

原文链接

Go 官方的一篇介绍泛型的文章。因为 Go 是一个强类型静态语言,因此要实现类型安全的函数式编程,必须了解一下泛型。(如果愿意在类型安全上多下功夫,也可以用反射实现,可以看陈皓老师的这篇文章(极客时间付费专栏)

Go 中的函数式编程

原文链接

一篇讲述在 Go 中使用 MapReduce 方式进行函数式编程的文章。正是它启发了我写了以下这篇文章。

Go 函数式编程:从一个 for 循环讲起

原文链接

函数式编程在大前端中应用比较广,但是在后端中(至少在我工作中)比较少见。诚然,我认为最大的拦路虎是后端的业务逻辑很复杂,业务代码繁重,而且大家习惯于指令式编程的思维,转变到声明式编程,对程序员的心智要求比较高。

我尝试用 Filter 这个函数式编程的一小部分特性,来说明一份代码如何从大家熟知的指令式编程,演化至函数式编程,来实现以下目标:

  • 提升代码的可复用性,以及对需求变更、技术变更的快速适应
  • 在不需要修改业务逻辑的情况下,利用并发特性,优化 IO 密集场景的性能

项目

samber/lo

samber/lo - GitHub

一个利用泛型来实现例如 map,filter 等功能的函数式编程框架,发展两年了,星星也非常多。我认为最大的缺点是没有实现 pipeline,只支持 MapFilter 这种。

IBM/fp-go

IBM/fp-go - GitHub

另一个函数式编程框架。不过这个相对比较学术派一点,目前也是在积极开发阶段。缺点是没有上一个容易上手,需要多了解一点函数式编程的概念。

工具/网站

ffmpeg-online

网站链接:ffmpeg-online

一个使用 ffmpeg.wasm 的在线 demo,可以在浏览器上运行 ffmpeg。ffmepg 算是一个我觉得非常适合 wasm 的应用场景,把计算密集的负载放到边缘计算,一来减少了对服务器性能的依赖,二来对隐私也是有利的(数据仅在客户端本地处理),三是消除了依赖安装、环境配置等等问题(对交付非常友好)。

unlimited:waifu2x

网站链接:unlimited:waifu2x

这是另外一个使用 wasm 的例子。waifu2x是一个图像超分算法,利用卷积神经网络来提升图像的分辨率。这里作者把训练出来的模型导出成 onnx 格式,利用 onnx-runtime 来在设备端运算。因此这个 unlimited (wasm) 的版本比服务器端版本多了模型、4x 倍数等等的功能,速度也明显更快。

最后

这期周刊撰写的时间还是在春节假期内,所以还是再祝大家新年快乐,工作顺利,生活顺心。

这期的内容略少,且只有两个主题,一个是 Go 和函数式编程,另一个就是 wasm(还是炒的之前存的冷饭)。陪家人的时间比较多,也不想在假期想太多工作相关的事情,好好放松一下,所以就选了一个自己感兴趣的方面做了点研究。

License:  CC BY 4.0