Golang rpc服务更优雅的error处理和打印日志
服务器代码中,错误处理占据了大部分的逻辑。特别是C族语言,喜欢使用错误码,而不是异常来处理错误。 错误码比异常的优势是,性能会更好一些。抛出异常的话,因为有异常栈的展开,性能开销会大很多。 在Golang中,有一个error的接口来处理错误。
……腾飞中的个人博客
服务器代码中,错误处理占据了大部分的逻辑。特别是C族语言,喜欢使用错误码,而不是异常来处理错误。 错误码比异常的优势是,性能会更好一些。抛出异常的话,因为有异常栈的展开,性能开销会大很多。 在Golang中,有一个error的接口来处理错误。
……在我们的开发环境中,使多个golang版本并存。
大部分情况下,一个比较新的golang版本就能满足我们的日常的开发需求。
但是项目中,因为协作的原因,或者由于项目启动比较早,可能我们不同的工程需要用不同的golang版本。甚至有些工作用比较新的版本编译不了。
这时候,我们就需要让本地的开发环境支持多个golang版本。
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)
的例子说明它们的区别。