转载

Effective Go

简介

Go 是一门新语言。尽管它借鉴了现有语言的设计思想,但它拥有一些与众不同的特性,导致高效的 Go 程序的特点和用其相关语言编写的程序是不同的。直接将 C++ 或 Java 程序转换成 Go 不太可能产生令人满意的结果,因为 Java 程序是用 Java 写的,而不是用 Go。另一方面,从 Go 的角度思考问题可以得出有效但截然不同的程序。换句话说,要想写好 Go 程序,理解其性质和习惯用法是很重要的。知道 Go 编程的既定惯例也很重要,比如命名、格式化、程序构造等等,这样你编写的程序就会很容易被其他 Go 程序员理解。

本文档提供了编写清晰、惯用的 Go 代码的技巧。它是 language specification , Tour of Go , 和 How to Write Go Code 的扩展, 你应该先阅读这些文档。

示例

Go 的源码库不仅是作为核心库,也可以作为如何使用 Go 语言的示例。此外,许多包包含了可直接在 golang.google.cn 运行的导入了该包的可执行示例,如果您对如何处理某个问题或如何实现某个东西有疑问,那么库中的文档、代码和示例可以提供答案、想法和背景。

代码格式

格式是最不重要但最易引起争论的问题。人们可以进行调整以适应不同的代码风格,但如果不需要,那就更好了,如果每个人都坚持同一种风格,就会减少花在这上面的时间。问题是如何在不需要冗长的风格规范指导的情况下实现这个乌托邦。

在 Go 中,我们采用了一种不同寻常的方法,让计算机来处理大多数格式化问题。gofmt 程序(也可以通过 go fmt 使用,它在包级别而不是源文件级别进行操作)读取 go 程序,并以标准的缩进和垂直对齐方式生成源代码,保留注释,如果需要,还可以重新格式化注释。如果你想知道如何处理一些新的布局情况,运行gofmt;如果答案看起来不正确,重新组织你的程序(或提交一个关于 gofmt 的 bug),不要解决它。

例如,不需要花费时间来排列结构字段的注释。Gofmt 会帮你完成。给出声明

type T struct{
    name string // name of the object
    value int // its value
}

gofmt 将会对齐这些列

type T struct {
    name  string // name of the object
    value int    // its value
}

所有标准库中的 Go 代码都使用 gofmt 进行了格式化。

一些格式化细节。简而言之:

  • 缩进

    我们使用 tab 进行缩进而且 gofmt 会默认生成它们。只有你必须时才使用空格

  • 行长

    Go 没有行长限制。不用担心穿孔纸带溢出。如果一行感觉太长,折叠它并额外缩进一个 tab。

  • 括号

    Go 相比于 C 和 Java 而言需要更少的括号:控制结构 (if, for, switch) 的语法中不需要括号。同样,运算符优先级层级结构也更短和更清晰,所以

    x<<8 + y<<16

    的含义正如其空格所表示的那样,这和其他语言是不同的。

注释

原文  https://studygolang.com/articles/24216
正文到此结束
Loading...