golang 空结构体struct{}解析

Introduction 这篇文章详细介绍了我最喜欢的Go数据类型,空结构体—struct{}。 空结构体是没有位段的结构体,以下是空结构体的一些例子: type Q struct{}var q struct{} 但是如果一个就结构体没有位段,不包含任何数据,那么他的用处是什么?我们能够利用...

2017-08-03 11:49:24

阅读数 1220

评论数 0

golang 生产环境编译一定要注意的内存爆炸问题

一句话,编译的时候指定了-gcflags '-N -l' -race参数,导致程序生成了大量的调试信息和data race detection信息。去掉这两个参数后,进程占用内存降低明显,在压力测试的场景下,服务内存占用稳定在100M以下。 否则 会吃掉1G-3G的内存,而且迟迟不释放。。因为...

2017-08-03 11:45:28

阅读数 351

评论数 0

golang redigo 在高并发下的问题。连接池占满CPU

最初我们使用了redigo【github.com/garyburd/redigo/redis】,使用上倒是没有什么不爽的,但是在压测的时候发现一个问题,即连接池的使用。 func factory(name string) *redis.Pool { conf := config.Get(&...

2017-08-03 10:52:41

阅读数 5424

评论数 1

Go 1.9 以后 map 并发读写的问题,sync.Map 揭秘

在Go 1.6之前, 内置的map类型是部分goroutine安全的,并发的读没有问题,并发的写可能有问题。自go 1.6之后, 并发地读写map会报错,这在一些知名的开源库中都存在这个问题,所以go 1.9之前的解决方案是额外绑定一个锁,封装成一个新的struct或者单独使用锁都可以。 本...

2017-08-01 14:53:52

阅读数 990

评论数 0

go string []byte相互转换

string 不能直接和byte数组转换 string可以和byte的切片转换 1,string 转为[]byte var str string = "test" var data []byte = []byte(str)   2,byte转...

2017-08-01 14:45:01

阅读数 41438

评论数 2

GO中time.After释放的问题

在谢大群里看到有同学在讨论time.After泄漏的问题,就算时间到了也不会释放,瞬间就惊呆了,忍不住做了试验,结果发现应该没有这么的恐怖的,是有泄漏的风险不过不算是泄漏,先看API的说明: // After waits for the duration to elapse and then s...

2017-08-01 14:35:09

阅读数 248

评论数 0

获得性能大幅提升的go程序优化实践,火焰图使用

先把结论列在前面: 1.Golang的性能可以做到非常好,但是一些native包的性能很可能会拖后腿,比如regexp和encoding/json。如果在性能要求较高的场合使用,要根据实际情况做相应优化。 2.on-cpu/off-cpu火焰图的使用是程序性能分析的利器,往往一针见血。虽然生成...

2017-08-01 14:26:38

阅读数 3108

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭