这是我参与「第五届青训营 」伴学笔记创作活动的第3天
高质量编程
正确可靠,简洁明晰
边界条件考虑齐全
异常处理保证稳定性
代码易读性易维护
可以使用Gofmt和goimports规范代码
注释
解释代码作用
解释代码实现过程
解释实现原因
解释什么时候出错
命名
简洁
缩略词全大写
变量距离被使用地方越远,越需要携带信息
流程控制应避免多重嵌套,优先处理异常,以尽早返回或循环,减少嵌套层数
错误和异常处理
不建议使用panic,若可以解决,用error代替。panic用于真正的异常
性能优化
使用benchmark用来评估
go test -bench=./benchmem
切片slice:
尽可能在make()初始化时提供容量信息
slice大内存及时释放:在原切片上创建新的切片,不会创建底层数组
场景:在大切片上创建小切片;原切片在内存中被引用,内存未释放
字符串处理
拼接:使用+性能最差,strings.Builder和bytes.Buffer相近,strings.Buffer更快
空结构体
空结构体可以节省内存,可作为各种场景的占位符,本身具有很强的语义
atomic包
锁是通过操作系统实现,属于系统调度;atomic是硬件实现,效率更高
sync.Mutex应该用来保护一段逻辑,而不是一个变量
非数值操作,atomic.Value能承载一个interface{}
普通应用代码不用过分追求性能;越高级优化手段,越容易出问题