GO基础笔记 | 青训营笔记

60 阅读2分钟

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

GO高质量编程

代码格式:

可以使用 gofmt 和 goimports 工具自动格式化代码。对于 GoLand,可以在 *Settings - Tools - Actions on Save* 中打开 *Reformat code**Optimize imports*(不出意外的话,它们应当是默认启用的)。也可通过 Ctrl+Alt+L 快捷键格式化代码(其实所有 Jetbrains 的 IDE 都支持使用这个快捷键格式化代码)

注释:

 好的注释应该能做到解释代码作用,让阅读者了解代码思路,对于变量定义能进行解释,
 

命名规范

简洁大于冗长,缩略词全大写,我个人比较喜欢用大驼峰命名法。

函数

  • 函数名不应携带包名的上下文信息,因为两者总是成对出现;
  • 函数名应当尽量简短;
  • 当名为 foo 包的某个函数返回类型为 Foo 时,可以省略类型信息而不导致歧义;
  • 当名为 foo 包的某个函数返回类型为 T 而不是 Foo 时,应该在函数名中加入类型信息。

  • 只由小写字母组成。不包含大写字母和下划线等字符;
  • 简短并包含一定的上下文信息;
  • 不要和标准库同名。
  • 不使用常用变量名作为包名。例如使用 bufio 而不是 buf
  • 使用单数而不是复数。例如使用 encoding 而不是 encodings
  • 谨慎的使用缩写。例如使用 fmt 在不破坏上下文的情况下比 fotmat 更简短。

总体来说,Go 的包命名规范也体现了 Go 大道至简的风格。

错误和异常处理

  • 对于简单错误(仅出现一次,在其他地方不需要捕获),优先使用 errors.New 创建匿名变量直接表示;如有格式化需求,使用 fmt.Errorf;
  • fmt.Errorf 中使用 %w 将一个错误关联至错误链中;
  • 使用 errors.Is 判定一个错误为特性错误,比起直接使用 == 的好处是可以判断错误链上的所有错误是否含有特定错误;
  • 使用 errors.As 获取错误链上特定种类的错误;
  • 只有在程序启动阶段发生不可逆转的错误时才使用 panic(类似于 Java java.lang.Error 的地位,但是 Go 可以使用 revover 语句来从 panic 中恢复;