1
faceair 2018-02-14 15:28:42 +08:00 via iPhone
行数可以变短但必然带来额外的开销(内存分配),一般 go 作为高性能后端对这些都是很敏感的
|
2
loading 2018-02-14 15:47:53 +08:00 via iPhone
我一直认为 golang 需要一个牛逼的 Code Snippet。
|
5
ZSeptember 2018-02-14 16:20:46 +08:00 via Android
你需要一个基础库而已,现在 go 没有很好的,自己慢慢积累吧。最近用 Go 重写公司项目,写了好多工具方法。
|
7
Kisesy 2018-02-14 19:09:13 +08:00
计算一个 sha256,最少两行吧
data, _ := ioutil.ReadFile("test.exe") sha256.Sum256(data) |
8
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) |
9
faceair 2018-02-14 20:23:11 +08:00
有个 typo,上面有个堆写成栈了
|
10
MeteorCat 2018-02-14 20:58:01 +08:00 via Android
有个方法就是利用 C 扩展......
|
11
orvice 2018-02-14 23:04:05 +08:00
这时候就需要自己 /公司有个 go 的公共库
|
12
inflationaaron 2018-02-15 00:31:25 +08:00 via iPad
也不看看 Python 和 Java 都出来多久了。battery-included 这种概念也是最近才有的,ruby 就是一个例子。完全社区化就是 nodejs 搞的,啥都有包。
|
14
ifsclimbing 2018-02-15 01:28:31 +08:00
@faceair 哈哈,第一次听说行数和内存分配有关系
|
16
gnaggnoyil 2018-02-15 15:58:34 +08:00
@faceair 不太了解 go,不过碰到这种情况不考虑用 lazy evaluation 避免将内存分配写死吗?
|
17
ech0x 2018-02-16 11:30:12 +08:00 via iPhone
我觉得我 go 的标准库已经挺够用了,这个问题出现是因为 go 的第三方库还不够多吧。
真要说标准库不够用的是 swift 吧,虽然是跨平台了,但是标准库完全没法用啊。 |