Golang rpc服务更优雅的error处理和打印日志
服务器代码中,错误处理占据了大部分的逻辑。特别是C族语言,喜欢使用错误码,而不是异常来处理错误。 错误码比异常的优势是,性能会更好一些。抛出异常的话,因为有异常栈的展开,性能开销会大很多。 在Golang中,有一个error的接口来处理错误。
……腾飞中的个人博客
服务器代码中,错误处理占据了大部分的逻辑。特别是C族语言,喜欢使用错误码,而不是异常来处理错误。 错误码比异常的优势是,性能会更好一些。抛出异常的话,因为有异常栈的展开,性能开销会大很多。 在Golang中,有一个error的接口来处理错误。
……goenv库将环境变量的值设置到一个结构体里, 以方便使用。类似于encoding/json解析到结构体。
为了简化docker的发布,把配置从配置文件里抽取出来,设置到环境变量里。然后发布docker 容器的时候就不需要再带一个配置文件了。
……golang的交叉编译。
golang的交叉编译非常简单,只要配好对应的环境变量后再go build
就可以了。
需要配置以下的环境变量。
CGO_ENABLED
默认情况下这个变量为1。
交叉编译不支持cgo,所以需要关闭cgo。
linux/unix下为CGO_ENABLED=0
。
windows下为set CGO_ENABLED=0
。
初学golang的很多人对buffer大小为0和1的channel都不了解。
下面通过make(chan bool)
和make(chan bool, 1)
的例子说明它们的区别。
懒是程序猿的本性。一切重复的东西,程序猿都可以写成脚本来让它自己运行。很多时候程 序猿要写脚本去连到服务器上去执行些命令,其中还包含上传文件到服务器或者从服务器上 下载文件下来。
……Golang不使用cgo,直接操作共享内存。
故事起源于要搭一个高性能的日志中心。当然使用了elk这一套。但是,对于logstash来说, 它主要使用的是文件日志的方式了捕捉log。而写文件日志的话会非常慢。对于实时日志要 处理滚动的日志更是这样,每次检查是否需要流动日志,然后打开日志,然后写入,然后 关闭,当然这中间可以优化。这一切都是那么慢,发起了n个系统调用,硬盘寻道等。这时 候想到了用共享内存来通信。
……