go
gochenguowei
在工作之余,记录下自己学习的东西,并收藏一些好的文章。
展开
-
grace(热重启)剖析
Beego中的热重启是以一个单独的模块二存在的,你可以在其他项目单独使用,例如:import( "log" "net/http" "os" "strconv" "github.com/astaxie/beego/grace" ) func handler(w http.ResponseWriter, r *http.Request) { ...原创 2020-05-06 13:42:32 · 965 阅读 · 0 评论 -
go net.http 每次都查询dns的导致的问题
在线上部署的一个程序,在某天突然在一天内出现多次 “dial tcp: lookup xxxx.com on 223.x.x.x:53: read udp 180.x.x.x:7792->223.x.x.x:53: i/o timeout” 的问题,导致线上告警触发了多次。后面查找问题,发现 go 每次发起 http 请求都会发起一个 dns 请求来进行域名解析,而我们服务器的dns...原创 2019-03-03 16:38:07 · 25864 阅读 · 0 评论 -
使用GDB调试GO
转自:https://blog.csdn.net/gua___gua/article/details/50481534GDB是FSF(自由软件基金会)发布的一个强大的类UNIX系统下的程序调试工具。使用GDB可以做如下事情:启动程序,可以按照开发者的自定义要求运行程序。 可让被调试的程序在开发者设定的调置的断点处停住。(断点可以是条件表达式) 当程序被停住时,可以检查此时程序中所发生的...转载 2019-03-10 15:13:01 · 824 阅读 · 0 评论 -
go 字符串string 和 字符数组[]byte 的高效转换
在我们的程序里面基本都写成如下的转换var a = []byte("hello world")var b = string(a)这样的强制类型转换其实是调用底层的copy 函数进行转化,也就是说需要在内存中进行拷贝。这如果并发量达到千万级别,这样的转换是很耗性能的。那么我们是否可以使用 unsafe.Point() 这样的指针直接转换呢?首先我们的知道 string 和 []byt...原创 2019-09-16 22:48:27 · 6279 阅读 · 1 评论 -
Go 高性能编程技巧
1.在高并发队列任务分发的场景中RingBuffer比Channel的性能更好2.defer功能不是静态编译时提供的,而是运行时提供的,所以使用defer会产生一些额外的性能开销(了解就好,该用还是得用)3.encoding/json序列化是通过反射机制实现的,性能很差,可以使用ffjson生成encode/decode代码来提升性能。如果可能,使用MsgPack替代JSON,因为Msg...转载 2019-09-17 22:03:44 · 931 阅读 · 0 评论