共计 2710 个字符,预计需要花费 7 分钟才能阅读完成。
本文参加了思否技术征文,欢送正在浏览的你也退出。
前言
Google 官网在 2022.11.23 重磅公布了 Go 语言编码标准。
这个编码标准源自于 Google 外部的 Go 我的项目,是 Google 的开发人员要恪守的代码标准。
在 Go 语言诞生后,全世界的 Go 开发者其实始终期盼着能有官网的编码标准,但迟迟未能如愿。
有些技术团队依据本人原来的编程语言背景,间接照搬过去,用于公司外部的 Go 语言编码标准。
尤其是写 Java 的,把 Java 的编程语言标准用于 Go 语言是十分不适合的。
为了让 Go 开发者能够晓得如何写出更简洁、更纯粹的 Go 代码,官网也做出了一些致力,推出了 Effective Go 和 Go Code Review Comments。
Go 官网的 Effective Go: https://go.dev/doc/effective_go。
Note added January, 2022: This document was written for Go’s release in 2009, and has not been updated significantly since. Although it is a good guide to understand how to use the language itself, thanks to the stability of the language, it says little about the libraries and nothing about significant changes to the Go ecosystem since it was written, such as the build system, testing, modules, and polymorphism. There are no plans to update it, as so much has happened and a large and growing set of documents, blogs, and books do a fine job of describing modern Go usage. Effective Go continues to be useful, but the reader should understand it is far from a complete guide. See issue 28782 for context.
- Go 官网的 Code Review Comments: https://github.com/golang/go/…
Effective Go 次要解说的是 Go 语言的语法细节以及一些最佳实际。Code Review Comments 蕴含了一些 Code Review 过程中经常出现的问题。这 2 个指引能够拿来作为参考,但不足以成为一个十分欠缺齐全的 Go 语言编码标准。
社区的 Go 语言编码标准
这些年整个 Go 社区陆续诞生了一些有影响力的 Go 语言编码标准,次要有以下这些:
- Uber 的编码标准:https://github.com/uber-go/guide
- CockroachDB 的编码标准:https://wiki.crdb.io/wiki/spa…
Uber 的编码标准开源在 GitHub,业界认可度最高。
接下来咱们看看这次 Google 推出的 Go 语言编码标准蕴含哪些内容。
Google 的 Go 语言编码标准
须要申明的是,这是 Google 推出的 Go 语言编码标准,并不是 Go 团队本人独自推出的 Go 语言编码标准。
这次公布的 Go 语言编码标准次要蕴含 Style Guide,Style Decisions 和 Best Practices 这三局部内容。
Document | Link | Primary Audience | Normative | Canonical |
---|---|---|---|---|
Style Guide | https://google.github.io/styl… | Everyone | Yes | Yes |
Style Decisions | https://google.github.io/styl… | Readability Mentors | Yes | No |
Best Practices | https://google.github.io/styl… | Anyone interested | No | No |
- Style Guide 是 Go 编码标准的根底,这里形容的规定是通用的,所有 Go 开发者都必须恪守。Style Decisions 和 Best Practices 都遵循了 Style Guide 里的规定。
- Style Decisions 讲述了局部具体的编码标准以及背地的起因。这里的内容会随着新的语言个性、新的库或者新的编程模式而发生变化。
- Best Practices 讲述了具体写代码过程中的最佳实际。参考这个最佳实际,能够让代码的可读性更好、代码更强壮,有利于代码的可继续保护。
编码标准举例
package 命名
比方在 style decisions 里,对于 package 的命名标准,Google 给出的倡议是:
Go package 的命名要短小,且只有小写字母。如果 package 的名字由多个单词组成,须要全副小写,且两头不要用任何符号做分隔。
例如,举荐用 tabwriter
,不举荐用 tabWriter
,TabWriter
,tab_writer
。
Receiver 命名
又比方对于 Receiver 的变量命名,Google 的编码格调是:
- 短,通常只有 1 个或者 2 个字母。
- 是 Receiver 变量的类型名称的缩写。
- 对于该类型的所有 Receiver 变量命名都保持一致。
坏的命名格调 | 好的命名格调 |
---|---|
func (tray Tray) | func (t Tray) |
func (info *ResearchInfo) | func (ri *ResearchInfo) |
func (this *ReportWriter) | func (w *ReportWriter) |
func (self *Scanner) | func (s *Scanner) |
还有更多十分好的编码格调就不在本文里全副列出了。
自己正在对该编码格调做翻译,开源在 GitHub:https://github.com/jincheng9/…,欢送大家关注。
开源地址
文章和示例代码开源在 GitHub: Go 语言高级、中级和高级教程。
公众号:coding 进阶。关注公众号能够获取最新 Go 面试题和技术栈。
集体网站:Jincheng’s Blog。
知乎:无忌。
福利
我为大家整顿了一份后端开发学习材料礼包,蕴含编程语言入门到进阶常识 (Go、C++、Python)、后端开发技术栈、面试题等。
关注公众号「coding 进阶」,发送音讯 backend 支付材料礼包,这份材料会不定期更新,退出我感觉有价值的材料。
发送音讯「 进群 」,和同行一起交流学习,答疑解惑。
References
- https://google.github.io/styl…