[ 后端3 | 青训营笔记]

124 阅读2分钟

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

总结一下,今天的课让我对编码规范和性能调优有了一些深刻的认识,让我对实际开发中的一些要素比较全面了解

一.go编码规范

所有编码规范符合三个原则:

  • 简单性
  • 可读性
  • 生产力

1.代码格式

使用gofmt自动格式化Go语言代码为官方统一风格

或者goimports

2.注释

  • 解释代码作用
  • 解释代码如何实现
  • 解释代码实现的原因
  • 解释代码什么情况下会出错

3.命名规范

I.变量

  • 缩略词大写,位于变量开头且不需要导出使用全小写
  • 全局变量需要给出更多上下文信息

II.方法

  • 函数名不懈怠包名的上下文信息
  • 尽量简短
  • 当名为foo的包某个函数返回类型Foo时,可以省略
  • 当名为foo的包某个函数返回类型T时,可以在函数名中加入类型信息

III.包

  • 只由小写字母组成
  • 简短且包含部分信息
  • 不与标准库同名

4.控制流程

  • 线性原则 : 避免嵌套(如if-else嵌套),一般来说去掉else
  • 优先处理错误/特殊情况,尽早返回

5.错误异常处理

I.简单错误

是指仅出现一次的错误

优先使用errors.New来创建匿名变量来直接表示简单错误

注:其他错误目前尚未理解,实际欸开发过程中再去了解

二.性能优化

1.代码性能评估

go语言提供benchmark工具测试性能

2.Slice

一个优化建议

最好在定义切片时给予预分配内存

多次扩容会增加程序运行时间

同理Map也是

核心思想就是尽量不触发扩容

3.字符串处理

字符串拼接建议使用strings.Buffer

使用 + 每次重新分配内存

strings.Builder,bytes.Buffer底层都是数组

4.空结构体节省内存

 m := make(map[int]struct{})

5.用atomic包代替锁

atmomic通过硬件实现,效率比锁高