是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记
安装 Go 语言
- 访问 go.dev/ ,点击 Download ,下载对应平台安装包,安装即可
- 如果无法访问上述网址,可以改为访问 studygolang.com/dl 下载安装
- 如果访问 github 速度比较慢,建议配置 go mod proxy,参考 goproxy.cn/ 里面的描述配置,下载第三方依赖包的速度可以大大加快
配置 Go 语言开发环境
可以选择安装 VS Code , 或者 Goland ,对于 VS Code,需要安装 Go 插件
依赖管理
- Gopath
- Go Vendor
- Go Module
控制流程
- 避免嵌套,保持正常流程清晰
- 如果两个分支中都包含 return 语句,则可以去除冗余的 else
- 尽量保持正常代码路径为最小缩进,优先处理错误情况/特殊情况,并尽早返回或继续循环来减少嵌套,增加可读性
错误和异常处理
-
简单错误处理
- 优先使用 errors.New 来创建匿名变量来直接表示该错误。有格式化需求时使用 fmt.Errorf
- github.com/golang/go/b…
-
错误的 Wrap 和 Unwrap
- 在 fmt.Errorf 中使用 %w 关键字来将一个错误 wrap 至其错误链中
- github.com/golang/go/b…
-
Go1.13 在 errors 中新增了三个新 API 和一个新的 format 关键字,分别是 errors.Is、errors.As 、errors.Unwrap 以及 fmt.Errorf 的 %w。如果项目运行在小于 Go1.13 的版本中,导入 golang.org/x/xerrors 来使用。以下语法均已 Go1.13 作为标准。
-
错误判定
- 使用 errors.Is 可以判定错误链上的所有错误是否含有特定的错误。
- github.com/golang/go/b…
- 在错误链上获取特定种类的错误,使用 errors.As
- github.com/golang/go/b…
-
panic
- 不建议在业务代码中使用 panic
- 如果当前 goroutine 中所有 deferred 函数都不包含 recover 就会造成整个程序崩溃
- 当程序启动阶段发生不可逆转的错误时,可以在 init 或 main 函数中使用 panic
- github.com/Shopify/sar…
-
recover
- recover 只能在被 defer 的函数中使用,嵌套无法生效,只在当前 goroutine 生效
- github.com/golang/go/b…
- 如果需要更多的上下文信息,可以 recover 后在 log 中记录当前的调用栈。
- github.com/golang/webs…