分类 编程语言 articles

Golang rpc服务更优雅的error处理和打印日志

服务器代码中,错误处理占据了大部分的逻辑。特别是C族语言,喜欢使用错误码,而不是异常来处理错误。 错误码比异常的优势是,性能会更好一些。抛出异常的话,因为有异常栈的展开,性能开销会大很多。 在Golang中,有一个error的接口来处理错误。

……

Continue reading

tenfyzhong/goenv库介绍

goenv库将环境变量的值设置到一个结构体里, 以方便使用。类似于encoding/json解析到结构体。

背景

为了简化docker的发布,把配置从配置文件里抽取出来,设置到环境变量里。然后发布docker 容器的时候就不需要再带一个配置文件了。

……

Continue reading

golang交叉编译

golang的交叉编译。

golang的交叉编译非常简单,只要配好对应的环境变量后再go build就可以了。 需要配置以下的环境变量。

CGO_ENABLED

默认情况下这个变量为1。 交叉编译不支持cgo,所以需要关闭cgo。 linux/unix下为CGO_ENABLED=0。 windows下为set CGO_ENABLED=0

……

Continue reading

Golang直接操作共享内存

Golang不使用cgo,直接操作共享内存。

前言

故事起源于要搭一个高性能的日志中心。当然使用了elk这一套。但是,对于logstash来说, 它主要使用的是文件日志的方式了捕捉log。而写文件日志的话会非常慢。对于实时日志要 处理滚动的日志更是这样,每次检查是否需要流动日志,然后打开日志,然后写入,然后 关闭,当然这中间可以优化。这一切都是那么慢,发起了n个系统调用,硬盘寻道等。这时 候想到了用共享内存来通信。

……

Continue reading