01
Golang之美
初始golang,语言之美之简洁之高效,天生具有高并发等特性。 本文来自蔡欣圻、邵聪聪,对go语言的分析很到位全面,在这里分享出来给go开发者,希望能让你有一个更深刻的认知。
原文链接:
https://juejin.im/post/5bf50600e51d457dd85460d8
原文二维码:
02
内存分配
glibc
用的malloc为ptmalloc2。往往不能满足我们的需要,造轮子实现一个内存池或者内存分配器几乎是家常便饭。对于ptmalloc2,至少有以下缺点:
1. 内存碎片多。
2. 内存释放方式不太好。ptmalloc 收缩内存是从 top chunk 开始,如果与 top chunk 相邻的 chunk 不能释放, top chunk 以下的 chunk 都无法释放。
3. 锁的开销,并发性能低。
4. 内存释放不可控(free后不会立刻把内存还给os,而且采用)。
5. 线程不均衡。(线程A分配的内存用完之后free掉,这块内存一般不会立刻归还os,线程B malloc的时候不能用这块内存)
6. 元数据较大。
7. 小对象分配速度低。
原文链接:
https://zhuanlan.zhihu.com/p/53581298
原文二维码:
03
Go channel 实现源码分析
2.创建channel实现
创建channel实例:
ch := make(chan int, 4)
实现函数:
func makechan(t *chantype, size int64) *hchan
大致实现:
执行上面这行代码会 new一个hchan 结构,同时创建一个 dataqsiz=4 的 int 类型的循环队列,其实就是一个容纳4个元素的数组,就是按顺序往里面写数据,写满之后又从0开始写,这个顺序索引就是hchan.sendx
......
原文链接:
http://www.cnblogs.com/hlxs/p/10275303.html
原文二维码:
04
Golang 编译- ldflags -X 在 vendor 中不生效的问题
Golang项目在编译链接的时候可以通过 -ldflags -X 来给代码中的变量赋值,然而这天我却遇到了一个诡异的问题……
折腾了许久,最后终于搞明白了。Golang 在 1.5 版本时引入了 vendor 属性,并在 1.6 以后版本默认启用,于是查找依赖包的顺序就变成了:
当前包下的 vendor 目录;
向上级目录查找,直到找到src下的 vendor 目录;
查找 $GOPATH 目录;
查找 $GOROOT 目录;
原文链接:
https://chenjiehua.me/golang/golang-build-with-ldflags-not-work-for-vendor.html
原文二维码:
05
如何评估 Kubernetes 持久化存储方案
在2018年的Garnter技术成熟度曲线中,容器存储出现在了技术触发期,已经开始进入大众的视野。我相信,在未来的两年内,容器存储会随着Kubernetes的进一步成熟和商业化,其地位会越来越重要。如何在五花八门的存储产品中,选择适合自己的一款,将会是IT大佬们必须要面对的问题。本文将会从使用场景角度分析,如何评估容器存储方案。
原文链接:
https://mp.weixin.qq.com/s/6yg_bt5mYKWdXS0CidY6Rg
原文二维码:
职位推荐:
【广州-琶洲】BAT 创业团队 诚招后台开发同学
【上海-新天地】e 成科技-诚募 Go 语言工程师
【上海】晓信科技招聘Go工程师
招聘详情地址:https://gocn.vip/explore/category-8
探探 Gopher China 2019大会全面启动 Gopher China 2019 早鸟票开售中〜,点击下方“阅读原文”即可报名!