这是我参与「第三届青训营 -后端场」笔记创作活动的第2篇笔记。 1.1 简介 编程原则 1.简单性 2.可读性 3.生产力
1.2 编码规范 1.2.1 代码格式 gofmt:官方工具,自动格式化统一风格
goimports:在gofmt基础上加上依赖包管理
1.2.2 注释 解释代码作用——适合注释公共符号 解释代码如何做——适合注释实现过程 解释代码实现的原因——适合解释代码的外部因素,提供上下文 解释代码什么情况会出错——适合解释代码的限制条件
1.2.3 命名规范 变量 1.简洁 2.使用ServeHTTP而不是ServeHttp
函数function 1.函数名不携带包名的上下文信息 3.函数名尽量简短
包package 1.只由小写字母组成 2.简单包含上下文信息 3.不与标准库同名
1.2.4 编码规范——控制流程 尽量保证正常代码路径未最小缩进
1.2.5 编码规范——错误和异常处理 简单错误 错误的Warp和Unwarp 错误判定errors.As获取错误连 panic:比错误更严重,建议使用error代替panic recover:只在defer函数中有效,只在当前协程有效,后进先出
defer 返回前先调用,后进先出
1.3 性能优化建议
1.3.1 性能优化建议-benchmark
1.3.2 性能优化建议-slice slice预分配内存:尽可能在make()初始化确定大小 切片本质是一个数组片段的描述
1.3.3 性能优化建议-map map预分配内存
1.3.4 性能优化建议——字符串处理 +:性能最差 strings.Builder拼接字符串:性能最好 bytes.buffer:性能较好 字符串预分配 build.Grow()字符串预分配 buf.Grow()字符串预分配
1.3.5 性能优化建议——空结构体 使用空结构体节省内存
1.3.6 性能优化建议——atomic包 比锁性能要好 锁属于系统操作,atomic通过硬件实现 锁用于保护一段逻辑,不仅用于保护变量
02.性能调优实现 2.1 原则 要靠数据而不是猜测 要定位最大瓶颈而不是细枝末节 不要过早优化 不要过度优化
2.2性能分析工具pprof 说明1知道什么地方耗费cpu,内存,可视化
2.2.1 功能简介