这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
1. 高质量编程
高质量:正确可靠,简洁清晰
l 正确:各种边界条件是否考虑完备
l 可靠:异常情况处理,稳定性保证
l 简洁清晰:易读易维护
编码规范:
代码格式:
推荐使用gofmt自动格式化代码
注释:
库中的任何函数都要对功能予以注释
注释应该做的:
解释代码作用:适合注释公共符号;
解释代码如何做的
解释代码实现的原因:适合脱离上下文环境就很难明白的代码
解释代码什么情况会出错:适合解释代码的限制条件
命名规范:
变量:简洁胜于冗长,缩略词全大写,但当其位于变量开头且不需要导出时,使用全小写;
使用ServerHTTP而不是ServerHttp。
控制流程:
避免嵌套
优先处理错误情况/特殊情况,尽早返回或继续循环来减少嵌套
错误和异常处理:尽量避免panic
2. 性能优化
benchmark工具
gotest -bench=. -benchmem
slice预分配内存:尽可能在Make()初始化切片时提供容量信息。
切片是数组的一个引用,包含数组指针,长度,容量。
map预分配内存:data := make(map[int]int, size)
使用strings.Builder:strings.Builder和bytes.Buffer底层都是[]byte数组。
使用空结构体:空结构体不占用内存空间。
实现Set:
多线程编程:使用atomic包
3. 性能调优实战
3.1 性能分析工具pprof
查看耗时主要在哪?
Flat==Cum:函数中没有调用其他函数
Flat==0:函数中只有其他函数的调用
找到耗时最长的代码,修改或注释
查看内存占用主要在哪?
注释掉这部分代码,即可修复成功
网页端的直观视图:web命令(pprof命令行下)
3.2 性能调优案例
业务服务优化:
基础库优化
Go语言优化