这一期我们谈一谈 Go 语言的 编码规范 。一个统一的代码风格有利于提高代码的可读性、规范性和统一性。首先声明一点,这里的编码规范并不代表官方,只是参考网络上的一些文章以及 Go 语言官方代码风格的制定进行整理。

命名


包命名



package

文件命名



Windows_test.go文件名_平台.goutils_windows.goutils_linux.gomain.go

常量命名



APP_VERSION括号
const (
  APP_VERSION = "0.1.0"
  CONF_PATH = "/etc/xx.conf"
)

当然网上还有另一种命名风格,那就是使用驼峰命名法,但我个人并不推荐这种命名风格。


变量命名



useruapiClientAPIClientboolhasiscanallowisExistcanManage

结构体命名



struct
// 多行声明
type Person struct {
 name string
 gender string
 age  int
}

// 多行初始化
person := Person{
    name: "John",
    gender: "male",
    age: 18,
}

接口命名



erReaderWriter
type Reader interface {
    Read(p []byte) (n int, err error)
}

函数命名



  1. 使用驼峰命名法
  2. 对于需要在包外访问的函数要以大写字母开头命名
  3. 对于不需要在包外访问的函数要以小写字母开头命名

函数内部的参数的排列顺序也有几点原则:

  • 参数的重要程度越高,应排在越前面
  • 简单的类型应优先复杂类型
  • 尽可能将同种类型的参数放在相邻位置,则只需写一次类型
注释


包注释



package
doc.gopackagepackage
// Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package fmt

结构体/接口注释



结构体名, 结构体说明

同时结构体内的每个成员变量都要有说明,该说明放在成员变量的后面(注意对齐),例如:

// User , 用户对象,定义了用户的基础信息
type User struct{
    Username  string // 用户名
    Email     string // 邮箱
}

函数/方法注释



每个函数或者方法都应该有注释说明,函数、方法和类型的注释说明都是一个完整的句子。

当然还有下面这种注释习惯,该函数注释包括三个方面(严格按照下面的顺序):

// 函数名, 简要说明
// 参数:
//      参数1:参数说明
//      参数2:参数说明
// 返回值:
//      每行一个返回值

特别注释



TODO
FIXME
NOTE

其他注意点



80bool returns true if
代码风格 


缩进和折行



tabgofmt120

括号和空格



  1. 在 Go 语言中一定要注意括号的放置位置,大括号不换行
  2. 运算符和操作数之间要留空格

包的导入



import()

错误处理



err_errlogreturnpanic