![]() | 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 looplj 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 吧,虽然是跨平台了,但是标准库完全没法用啊。 |