青训营笔记 - Go的包管理和编码规范

62 阅读2分钟

整理一下Go的基础环境配置和包管理问题,随后对Go语言的编码规范做一个简要总结。

包管理

Go语言的源码复用是建立在包(package)的基础之上的。src目录下存放所有源码,每一个子目录都是一个代码包,同一目录下的每一个源文件开头第一行必须从属于同一个package。Go语言的入口包叫做main,这个必须有。

通过import完成包的导入,

// 单个导入
import "package"
// 批量导入
import (
  "package1"
  "package2"
  )

注意包的命名不要和自带的或者常用的三方库重名。import后会自动执行init,完成资源的初始化。因此也有了匿名导入,比如:

import (
   "database/sql"
   _ "github.com/mysql/driver"
 ) 

这里就是对github那个三方包完成了匿名导入。

高质量编程

希望程序要:

  • 各种边界条件是否考虑完备
  • 异常情况处理,稳定性保证
  • 易读易维护

希望程序有如下特点:

  • 简单:逻辑简明清晰,修改
  • 可读:团队交互与代码维护
  • 生产力:保证团队整体工作效率

编码规范方面建议:

  1. 注释:公共符号始终要注释,但注释不要写废话,要提供额外上下文信息。写明代码作用,怎么做,为什么这么做,何时可能出错。
  2. 代码格式:可使用gofmt自动格式化代码。
  3. 命名规范:简洁为好,但要表征充足得到信息,尽量变量名给出很好的信息。
  4. 控制流程:尽量保持正常代码路径为最小缩进
  5. 错误和异常处理:优先使用errors.New创建匿名变量来直接表示简单错误,比如return errors.New("stopped after 10 redirects")。而复杂错误可用Wrap嵌套,生成一个error的跟踪链。 error常用于提供上下文信息链,定位问题,panic用于真正的异常情况,recover与defer中生效,处理异常。 总之,降低阅读理解代码的成本,重点考虑上下文信息,名称尽量简洁清晰

Good naming is like a good joke. If you have to explain it, it's not funny. ---- Dave Cheney