原文连接:https://golang.org/doc/effective_go.htmlhtml
Go是一种新兴的编程语言。虽然它借鉴了现有语言的思想,但它具备不一样寻常的特性,使得高效的Go程序与其余语言编写的程序大不相同。将C ++或Java程序直接转换为Go不太可能产生使人满意的结果 - Java程序是用Java编写的,而不是Go。另外一方面,从Go语言的角度思考问题可能会产生一个成功但彻底不一样的程序。换句话说,要写好Go,了解它的特性和语法是很重要的。了解Go中编程的既定约定也很重要,例如命名,格式化,程序构造等,这样你编写的程序将很容易让其余Go程序员理解。程序员
该文档提供了编写清晰,经常使用的Go代码的技巧。 Language specification,Tour of Go和How to Write Go Code,这些都应该先阅读。golang
格式化问题是最具争议性但最不重要的问题。人们能够适应不一样的格式化风格,但若是不是勉强去适应代码风格,那就更好了,若是每一个人都遵循相同的风格,那么关注在格式化上的时间就会减小。问题在于如何可以长期在没有规定风格的状况下达到这个理想的状况。express
使用Go,咱们采起了一种不寻常的方法,让机器处理大多数格式问题。gofmt程序(也可做为go fmt,在包级别而不是源文件级别运行)读取Go程序并以标准样式的缩进和垂直对齐方式格式化源代码,并在必要时从新格式化注释。若是你想知道如何处理一些新的布局状况,请运行gofmt;若是结果彷佛不正确,从新整理你的程序(或提交有关gofmt的错误),没必要纠结于此。编程
例如,没有必要花时间排列结构体中字段的注释。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格式化过了。一些格式细节仍然存在,很是简短:布局
Go中支持C语言风格的/* */分段注释和C++风格的//行注释。一般使用的是行注释;段注释主要用在package的注释,但在表达式中或禁用大量代码时颇有用。code
程序和Web服务器-godoc处理Go源文件以提取有关package内容的文档。出如今声明以前的注释(注释与声明之间没有插入新的行)将与声明一块儿提取,做为项目的解释性文本。这些注释的风格决定了godoc产生文档的质量。regexp
每一个package在最开始都应该有一个段注释。对于多文件package,package注释只须要写在一个文件中,任何一个均可以。package的注释应该介绍package,并提供与整个package相关的信息。它将首先出如今godoc页面上,应该创建以下所示的详细文档。
/* Package regexp implements a simple library for regular expressions. The syntax of the regular expressions accepted is: regexp: concatenation { '|' concatenation } concatenation: { closure } closure: term [ '*' | '+' | '?' ] term: '^' '$' '.' character '[' [ '^' ] character-ranges ']' '(' regexp ')' */ package regexp
若是package很简单,那么package的注释能够很简短。
// Package path implements utility routines for // manipulating slash-separated filename paths.