3 高质量编程和性能调优| 青训营笔记

72 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第3天

1 高质量编程

代码正确可靠 简洁清晰

边界条件是否完备 异常处理 稳定型保证 易读易维护

原则

简单性 可读性 生产力

代码格式 注释 命名规范 控制流程 错误和异常处理

1.2.2-注释 公共符号始终要注释 不需要注释实现接口的方法

推荐使用gofmt自动格式化代码

gofmt goimports 自动增删依赖包

作用 适合注释公共符号 描述功能用途 如何做 适合注释实现过程 实现原因 解释代码外部因素 提供额外上下文 什么原因会出错 解释代码限制条件

1.2.3-命名规范 variable

简洁 缩略词全大写 位于变量开头且不需要导出时使用全小写 被使用越远 携带上下文信息越多

function 函数名不携带包名上下文信息 函数名尽量简短 包foo与函数返回类型Foo相同时可省略类型信息而不导致歧义 包foo返回类型T时 可在函数名中加入类型信息

-packge 只由小写字母组成 不包含大写下划线等 简短并包含一定上下文信息 不于标准库同名

尽量满足 不使用常规变量名作包名 用单数 谨慎使用缩写

小结 降低阅读理解成本 考虑上下文信息,设计简洁清晞名称

1.2.4-控制流程

避免嵌套 保持正常流程清晰

尽量保持正常代码路径为最小缩进

优先处理错误/特殊情况 尽早返回或继续循环减少嵌套

小结 线性原理 逻辑走直线 正常代码流程沿屏幕向下移动 提升可维护可读性 故障大多出在复杂条件语句 循环中

1.2.3-错误异常处理

简单错误 仅出现一次 优先使用errors.New 创建匿名变量直接表示简单错误 格式化fmt.Errorf、

Wrap 和Unwrap fmt.Errorf用%w关键字将一个错误关联至错误链中

错误判定 是否为特定错误errors.is 获取特定种类错误 errors.As

panic 不建议在业务代码中使用 调用函数中不包含recover会造成程序崩溃 若问题可以被屏蔽或解决 建议用error代替panic 启动阶段不可逆转错误可在init或main中使用panic

recover 只能在被defer的函数中使用 嵌套无法生效 只在当前goroutine生效 defer语句先进后出 需要更多上下文信息 可在recover后在log中记录当前调用栈

小结 error方便定位 panic真正异常 recover生效范围

1.2 编码规范

1.3性能优化建议

2 性能调优实战