分享一个简单的 Go 泛型实践小项目

2022-03-05 23:24:55 +08:00
 ZSeptember

https://github.com/zhenzou/executors

Go 泛型快发布了,就想着练练手。

虽然现在主要用 Go 了,但是还是怀念 Java 的一些东西,所以封装了一个协程池,提供一个类似 Java 的线程池的 API ,支持 future ,callback ,能够异步转同步等。

一般情况下,其实用不上协程池,但是在需要限制并发的场景下还是有用处的,新入坑的同学可以参考参考这个项目。

吐槽一下,Go 泛型不支持 method type param ,限制实在太大了。 虽然也可以通过 func type param 转一下,但是确实还是太丑。

本来准备把 CompletableFuture 的 API 实现下,但是不支持 method type param 组合起来不好看,就参考 JS 简单提供一个 then ,catch API 了。

2583 次点击
所在节点    Go 编程语言
7 条回复
makdon
2022-03-05 23:53:58 +08:00
限制并发的话,一个 chan 就可以了吧
ZSeptember
2022-03-06 00:26:22 +08:00
@makdon chan 自然可以,Go 限制并发的基本都是基于 chan 的。在很多地方用到的话,慢慢就会想着复用,最终还是会演进成一个协程池的模样。
makdon
2022-03-06 00:50:03 +08:00
@ZSeptember 就 3 行,不至于变成协程池吧...
mind3x
2022-03-06 03:36:20 +08:00
method 上不支持额外 type parameter 实在是太限制了
ZSeptember
2022-03-06 10:45:19 +08:00
@mind3x 是的,Go 这种有反射的语言,要做泛型,用类型擦除是比较简单的,但是性能差点。现在的实现是基于模版的,支持 method type param 感觉比较难。
ZSeptember
2022-03-06 10:59:52 +08:00
@makdon 简单梳理下,可能的演进方向

https://gist.github.com/zhenzou/21f4f1e585105540050f14c8e5cd5d6a

简单使用 chan 当然能运行,只是应该可以有更好用的 API 而已。
makdon
2022-03-06 11:12:11 +08:00
@ZSeptember 这么看起来确实更简洁了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/838272

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX