- 博客(7)
- 收藏
- 关注
原创 golang 空结构体struct{}解析
Introduction这篇文章详细介绍了我最喜欢的Go数据类型,空结构体—struct{}。空结构体是没有位段的结构体,以下是空结构体的一些例子:type Q struct{}var q struct{}但是如果一个就结构体没有位段,不包含任何数据,那么他的用处是什么?我们能够利用空结构体完成什么任务?Width在深入研究空结构体之前,我想先简短的介绍
2017-08-03 11:49:24 7194
原创 golang 生产环境编译一定要注意的内存爆炸问题
一句话,编译的时候指定了-gcflags '-N -l' -race参数,导致程序生成了大量的调试信息和data race detection信息。去掉这两个参数后,进程占用内存降低明显,在压力测试的场景下,服务内存占用稳定在100M以下。否则 会吃掉1G-3G的内存,而且迟迟不释放。。因为那1G的内存都去处理调试信息等冗余信息了。。 这个不是golang的问题,是个人编译时候的失误
2017-08-03 11:45:28 3295
原创 golang redigo 在高并发下的问题。连接池占满CPU
最初我们使用了redigo【github.com/garyburd/redigo/redis】,使用上倒是没有什么不爽的,但是在压测的时候发现一个问题,即连接池的使用。func factory(name string) *redis.Pool { conf := config.Get("redis." + name).(*toml.TomlTree) host := conf.
2017-08-03 10:52:41 10356 1
原创 Go 1.9 以后 map 并发读写的问题,sync.Map 揭秘
在Go 1.6之前, 内置的map类型是部分goroutine安全的,并发的读没有问题,并发的写可能有问题。自go 1.6之后, 并发地读写map会报错,这在一些知名的开源库中都存在这个问题,所以go 1.9之前的解决方案是额外绑定一个锁,封装成一个新的struct或者单独使用锁都可以。本文带你深入到sync.Map的具体实现中,看看为了增加一个功能,代码是如何变的复杂的,以及作者在实现s
2017-08-01 14:53:52 2120
原创 go string []byte相互转换
string 不能直接和byte数组转换string可以和byte的切片转换1,string 转为[]bytevar str string = "test"var data []byte = []byte(str) 2,byte转为stringvar data [10]byte byte[0] = 'T'byte[1] = '
2017-08-01 14:45:01 155911 5
原创 GO中time.After释放的问题
在谢大群里看到有同学在讨论time.After泄漏的问题,就算时间到了也不会释放,瞬间就惊呆了,忍不住做了试验,结果发现应该没有这么的恐怖的,是有泄漏的风险不过不算是泄漏,先看API的说明:// After waits for the duration to elapse and then sends the current time// on the returned channel.
2017-08-01 14:35:09 657
原创 获得性能大幅提升的go程序优化实践,火焰图使用
先把结论列在前面:1.Golang的性能可以做到非常好,但是一些native包的性能很可能会拖后腿,比如regexp和encoding/json。如果在性能要求较高的场合使用,要根据实际情况做相应优化。2.on-cpu/off-cpu火焰图的使用是程序性能分析的利器,往往一针见血。虽然生成一张火焰图比较繁琐(尤其是off-cpu图),但绝对值得拥有!之前一直使用Logsta
2017-08-01 14:26:38 4046
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人