本文参加了思否技术征文,欢送正在浏览的你也退出。

前言

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这三局部内容。

DocumentLinkPrimary AudienceNormativeCanonical
Style Guidehttps://google.github.io/styl...EveryoneYesYes
Style Decisionshttps://google.github.io/styl...Readability MentorsYesNo
Best Practiceshttps://google.github.io/styl...Anyone interestedNoNo
  1. Style Guide是Go编码标准的根底,这里形容的规定是通用的,所有Go开发者都必须恪守。Style Decisions和Best Practices都遵循了Style Guide里的规定。
  2. Style Decisions讲述了局部具体的编码标准以及背地的起因。这里的内容会随着新的语言个性、新的库或者新的编程模式而发生变化。
  3. Best Practices讲述了具体写代码过程中的最佳实际。参考这个最佳实际,能够让代码的可读性更好、代码更强壮,有利于代码的可继续保护。

编码标准举例

package命名

比方在style decisions里,对于package的命名标准,Google给出的倡议是:

Go package的命名要短小,且只有小写字母。如果package的名字由多个单词组成,须要全副小写,且两头不要用任何符号做分隔。

例如,举荐用tabwriter,不举荐用tabWriterTabWritertab_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...