有没有臃肿版的 Go 标准库?

2018-02-14 15:03:12 +08:00
 weakish
比如,sha256 一个文件需要写 10 行左右,心疼我的手指。
Ruby 只要两行(当然,Ruby 有点过头了,标准库里有太多差别很细微的方法,乃至一模一样的方法别名,污染补全列表)。
Python 和 Java (使用 Apache Commons 之类)也不过三五行。

再比如标准库里没有 Set,好好的 set.add(e)要写成 set[e] = true,虽然不过稍微多打了几个字,手指还好,但脑子很累,打字的时候要转换一下,阅读的时候还要转换一下。

所以,想问下有没有臃肿版本的 Go 标准库?
3769 次点击
所在节点    问与答
18 条回复
faceair
2018-02-14 15:28:42 +08:00
行数可以变短但必然带来额外的开销(内存分配),一般 go 作为高性能后端对这些都是很敏感的
loading
2018-02-14 15:47:53 +08:00
我一直认为 golang 需要一个牛逼的 Code Snippet。
orzfly
2018-02-14 15:48:29 +08:00
@faceair #1 标准库臃肿和额外的内存开销并没有必然联系吧。
faceair
2018-02-14 15:54:45 +08:00
@orzfly 🤔 是我想错了,这么说好像确实不合适
ZSeptember
2018-02-14 16:20:46 +08:00
你需要一个基础库而已,现在 go 没有很好的,自己慢慢积累吧。最近用 Go 重写公司项目,写了好多工具方法。
skadi
2018-02-14 18:59:35 +08:00
@faceair 你是要笑死我.
Kisesy
2018-02-14 19:09:13 +08:00
计算一个 sha256,最少两行吧
data, _ := ioutil.ReadFile("test.exe")
sha256.Sum256(data)
faceair
2018-02-14 20:08:23 +08:00
@skadi #6 没啥好笑的啊 我的全部思考过程是这样的

比如 #7 给的这个例子里返回了一个 hash 的 byte slice,这个返回值就极有可能生成到栈上影响 GC 性能啊
生成我们想要的 hash 值可以粗略的认为有两步,第一步是计算,第二部将计算结果转为期望的编码 ( hex 或 base64 )标准库写法这么冗长的原因将这两步拆开了,允许你自己将这两步的结果 slice 自己先塞进去,避免标准库把对象分配到堆上

我前面跟 @orzfly #3 说想错了的意思是,两者确实不是强关联的
比如我前面描述的两步是可以捏到一起的,第二步的结果的 slice 允许当参数传入就好了 所以 #7 的 API 可以大概设计成

result = make([]byte, 0, 64)
err = sha256.SumHex(data, result)
faceair
2018-02-14 20:23:11 +08:00
有个 typo,上面有个堆写成栈了
MeteorCat
2018-02-14 20:58:01 +08:00
有个方法就是利用 C 扩展......
orvice
2018-02-14 23:04:05 +08:00
这时候就需要自己 /公司有个 go 的公共库
inflationaaron
2018-02-15 00:31:25 +08:00
也不看看 Python 和 Java 都出来多久了。battery-included 这种概念也是最近才有的,ruby 就是一个例子。完全社区化就是 nodejs 搞的,啥都有包。
gowl
2018-02-15 01:15:59 +08:00
@faceair Code Snippet 指的是什么?
ifsclimbing
2018-02-15 01:28:31 +08:00
@faceair 哈哈,第一次听说行数和内存分配有关系
abscon
2018-02-15 15:26:35 +08:00
@loading 难道不是需要尖括号
gnaggnoyil
2018-02-15 15:58:34 +08:00
@faceair 不太了解 go,不过碰到这种情况不考虑用 lazy evaluation 避免将内存分配写死吗?
ech0x
2018-02-16 11:30:12 +08:00
我觉得我 go 的标准库已经挺够用了,这个问题出现是因为 go 的第三方库还不够多吧。
真要说标准库不够用的是 swift 吧,虽然是跨平台了,但是标准库完全没法用啊。
mengzhuo
2018-02-16 22:31:06 +08:00
@skadi 他的说法其实没问题
更多的代码确实会占用更多的 TEXT 空间,也就是内存。

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

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

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

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

© 2021 V2EX