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

LeslieLeung

共 2551字,需浏览 6分钟

 · 2024-04-11

关于本刊

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

博客:阿猫的博客-猫鱼周刊[1]

RSS:猫鱼周刊[2]

邮件订阅:猫鱼周刊[3]

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

Discord:猫兄的和谐号高铁[5]

私信:leslieleung@pm.me[6]

文章

函数式编程初探

原文链接 [7]

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

教程:上手泛型

原文链接 [8]

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

Go 中的函数式编程

原文链接 [10]

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

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

原文链接 [11]

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

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

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

项目

samber/lo

9d1dc97f47a5e10969666a68ca7b4169.webpsamber/lo - GitHub

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

IBM/fp-go

dfa923db01e7a966b3823bef2c9bc677.webpIBM/fp-go - GitHub

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

工具/网站

ffmpeg-online

网站链接:ffmpeg-online[12]

b4c04c5597f7fd4ed1e251dd25b691ec.webp

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

unlimited:waifu2x

网站链接:unlimited:waifu2x[14]

37ae0f73ede49a21110c46ac8bdb6d06.webp

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

最后

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

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

参考资料 [1]

阿猫的博客-猫鱼周刊: https://ameow.xyz/categories/weekly

[2]

猫鱼周刊: https://ameow.xyz/feed/categories/weekly.xml

[3]

猫鱼周刊: https://quail.ink/ameow

[4]

猫兄的和谐号列车: https://qinglite-1253448069.cos.ap-shanghai.myqcloud.com/web/c39e9c63042cd5f154d9a45e5f00a1674103e369

[5]

猫兄的和谐号高铁: https://discord.gg/5G5Nbtuz

[6]

leslieleung@pm.me: mailto:leslieleung@pm.me

[7]

原文链接: https://www.ruanyifeng.com/blog/2012/04/functional_programming.html

[8]

原文链接: https://go.dev/doc/tutorial/generics

[9]

这篇文章(极客时间付费专栏): https://time.geekbang.org/column/article/332606

[10]

原文链接: https://bitfieldconsulting.com/golang/functional

[11]

原文链接: https://ameow.xyz/archives/go-functional-programming-intro

[12]

ffmpeg-online: https://ffmpeg-online.vercel.app

[13]

ffmpeg.wasm: https://github.com/ffmpegwasm/ffmpeg.wasm

[14]

unlimited:waifu2x: https://unlimited.waifu2x.net/

[15]

waifu2x: https://github.com/nagadomi/nunif


浏览 3
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报