高质量编程与性能优化—课堂笔记 | 青训营笔记

128 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第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.函数名尽量简短

image.png

包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 功能简介

image.png