写点什么

Go 编码习惯

用户头像
baiyutang
关注
发布于: 2 小时前

译者:baiyutang

原文:https://dmitri.shuralyov.com/idiomatic-go#use-singular-form-for-collection-repo-folder-name


使用一致的拼写某些单词

这样:

// marshaling// unmarshaling// canceling// canceled// cancellation
复制代码

不要这样:

// marshalling// unmarshalling// cancelling// cancelled// cancelation
复制代码


为了 Go 项目的一致性,这些词有多种有效地拼法,选一个 Go 项目,参看 https://golang.org/wiki/Spelling


句子之间一个空格

这样:

// Sentence one. Sentence two.
复制代码

不要这样:

// Sentence one.  Sentence two.
复制代码

Go 风格的一致性,参看 CL 20022


变量式命名 Eroor

这样:

// Package level exported error.var ErrSomething = errors.New("something went wrong")
func main() { // Normally you call it just "err", result, err := doSomething() // and use err right away.
// But if you want to give it a longer name, use "somethingError". var specificError error result, specificError = doSpecificThing()
// ... use specificError later.}
复制代码

不要这样:

var ErrorSomething = errors.New("something went wrong")var SomethingErr = errors.New("something went wrong")var SomethingError = errors.New("something went wrong")
func main() { var specificErr error result, specificErr = doSpecificThing()
var errSpecific error result, errSpecific = doSpecificThing()
var errorSpecific error result, errorSpecific = doSpecificThing()}
复制代码

保持一致性,参看 https://talks.golang.org/2014/names.slide#14.

多个大写字母的专有名词或单词,所有字母小写

这样:

// Exported.var OAuthEnabled boolvar GitHubToken string
// Unexported.var oauthEnabled boolvar githubToken string
复制代码

不要这样:

// Unexported.var oAuthEnabled boolvar gitHubToken string
复制代码


人为注释永远有一个空格在斜杠后面

这样:

// This is a comment// for humans.
复制代码

不要这样:

//This is a comment//for humans.
复制代码

为了一致性,无空格风格被程序注释所保留,例如:

//go:generate go run gen.go
复制代码


参看 https://golang.org/cmd/compile/#hdr-Compiler_Directives.


集合、仓库和文件夹名字使用单数形式

github.com/golang/example/hellogithub.com/golang/example/outyetgolang.org/x/mobile/example/basicgolang.org/x/mobile/example/flappygolang.org/x/image/...github.com/shurcooL/tictactoe/player/badgithub.com/shurcooL/tictactoe/player/random
复制代码


github.com/golang/examples/hellogithub.com/golang/examples/outyetgolang.org/x/mobile/examples/basicgolang.org/x/mobile/examples/flappygolang.org/x/images/...github.com/shurcooL/tictactoe/players/badgithub.com/shurcooL/tictactoe/players/random
复制代码

避免无用的方法接受者名字

这样:

func (foo) method() {	...}
复制代码

不要这样:

func (f foo) method() {	...}
复制代码


判断空字符

if s == "" {	...}
复制代码


if len(s) == 0 {	...}
复制代码


互斥帽

struct {	...
rateMu sync.Mutex rateLimits [categories]Rate mostRecent rateLimitCategory}
复制代码

这里,rateMu 是一个互斥帽,它的存在,就像一顶帽子,在它保护的变量上方。


所以,不需要写注释,上面的内容可以默认等价于如下:

struct {	...
// rateMu protects rateLimits and mostRecent. rateMu sync.Mutex rateLimits [categories]Rate mostRecent rateLimitCategory}
复制代码

当添加新的成员,不相干的字段不受 rateMu 保护,要这样:

 struct { 	...
rateMu sync.Mutex rateLimits [categories]Rate mostRecent rateLimitCategory++ common service }
复制代码

不要这样:

 struct { 	...
rateMu sync.Mutex rateLimits [categories]Rate mostRecent rateLimitCategory+ common service }
复制代码

参看 https://talks.golang.org/2014/readability.slide#21.

flag.Usage 里不要 os.Exit(2)

这样:

flag.Usage = func() {	fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0])	flag.PrintDefaults()}
复制代码

不要这样:

flag.Usage = func() {	fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0])	flag.PrintDefaults()	os.Exit(2)}
复制代码

os.Exit 不要调用,因为 flat 包会做退出。参看例子 https://github.com/mdempsky/unconvert/commit/3b9aa41c71a855a5f5fee96dc751979ce6e8cbbehttps://github.com/campoy/embedmd/pull/12


发布于: 2 小时前阅读数: 5
用户头像

baiyutang

关注

广州 2017.12.13 加入

Microservices | Golang | Cloud Nitive | “Smart work,Not hard”

评论

发布
暂无评论
Go 编码习惯