标签:示例 iot 声明 color 本地变量 article detail lis log
大部分的格式问题可以通过 gofmt 解决,gofmt 自动格式化代码,保证所有的Go代码与官方推荐的格式保持一致,于是所有格式有关问题,都以 gofmt 的结果为准。
在编码阶段应该同步写好变量、函数、包的注释,最后可以利用godoc导出文档。注释必须是完整的句子,句子的结尾应该用句号作为结尾(英文句号)。注释推荐用英文,可以在写代码过程中锻炼英文的阅读和书写能力。而且用英文不会出现各种编码的问题。
每个包都应该有一个包注释,一个位于 package 子句之前的块注释或行注释。包如果有多个 go 文件,只需要出现在一个 go 文件中即可。
// ping包实现了常用的ping相关的函数 package ping
导出函数注释,第一条语句应该为一条概括语句,并且使用被声明的名字作为开头。
// 求 a 和 b 的和,返回 sum。 func Myfunction(sum int) (a, b int) { }
type Reader interface { Read(p []byte) (n int, err error) }
两个函数的接口名综合两个函数名
type WriteFlusher interface { Write([]byte) (int, error) Flush() error }
三个以上函数的接口名,抽象这个接口的功能,类似于结构体名
type Car interface { Start([]byte) Stop() error Recover() }
常量均需使用全部大写字母组成,并使用下划线分词:
const APP_VER = "1.0"
如果是枚举类型的常量,需要先创建相应类型:
type Scheme string const ( HTTP Scheme = "http" HTTPS Scheme = "https" )
如果模块的功能较为复杂、常量名称容易混淆的情况下,为了更好地区分枚举类型,可以使用完整的前缀:
type PullRequestStatus int const ( PULL_REQUEST_STATUS_CONFLICT PullRequestStatus = iota PULL_REQUEST_STATUS_CHECKING PULL_REQUEST_STATUS_MERGEABLE )
变量命名基本上遵循相应的英文表达或简写,在相对简单的环境(对象数量少、针对性强)中,可以将一些名称由完整单词简写为单个字母,例如:
var isExist bool var hasConflict bool var canManage bool var allowGitHook bool
变量名称一般遵循驼峰法,但遇到特有名词时,需要遵循以下规则:
下面列举了一些常见的特有名词:
// A GonicMapper that contains a list of common initialisms taken from golang/lint var LintGonicMapper = GonicMapper{ "API": true, "ASCII": true, "CPU": true, "CSS": true, "DNS": true, "EOF": true, "GUID": true, "HTML": true, "HTTP": true, "HTTPS": true, "ID": true, "IP": true, "JSON": true, "LHS": true, "QPS": true, "RAM": true, "RHS": true, "RPC": true, "SLA": true, "SMTP": true, "SSH": true, "TLS": true, "TTL": true, "UI": true, "UID": true, "UUID": true, "URI": true, "URL": true, "UTF8": true, "VM": true, "XML": true, "XSRF": true, "XSS": true, }
struct 申明和初始化格式采用多行:
定义如下:
type User struct{ Username string Email string }
初始化如下:
u := User{ Username: "test", Email: "test@gmail.com", }
if 接受初始化语句,约定如下方式建立局部变量
if err := file.Chmod(0664); err != nil { return err }
for 采用短声明建立局部变量
sum := 0 for i := 0; i < 10; i++ { sum += i }
return 尽早 return:一旦有错误发生,马上返回
f, err := os.Open(name) if err != nil { return err } d, err := f.Stat() if err != nil { f.Close() return err } codeUsing(f, d)
不要采用下面的处理错误写法
if err != nil { // error handling } else { // normal code }
采用下面的写法
if err != nil { // error handling return // or continue, etc. } // normal code
使用函数的返回值时,则采用下面的方式
x, err := f() if err != nil { // error handling return } // use x
尽量不要使用panic,除非你知道你在做什么
对 import 的包进行分组管理,用换行符分割,而且标准库作为分组的第一组。如果你的包引入了三种类型的包,标准库包,程序内部包,第三方包,建议采用如下方式进行组织你的包
package main import ( "fmt" "os" "kmg/a" "kmg/b" "code.google.com/a" "github.com/b" )
在项目中不要使用相对路径引入包:
// 错误示例 import “../net” // 正确的做法 import “github.com/repo/proj/src/net”
goimports 会自动帮你格式化
单元测试文件名命名规范为 example_test.go
测试用例的函数名称必须以 Test 开头,例如:TestExample
参考:
http://blog.csdn.net/myzlhh/article/details/52269591
标签:示例 iot 声明 color 本地变量 article detail lis log
原文地址:http://www.cnblogs.com/phpgo/p/6741301.html