1. команда гофмт
Большинство проблем с форматом можно решить с помощью gofmt. Gofmt автоматически форматирует код, чтобы убедиться, что все коды go соответствуют официально рекомендованному формату. Все проблемы, связанные с форматом, зависят от результатов gofmt. Поэтому рекомендуется выполнить эту команду перед отправкой кодовой базы.
2. Президент
Длина строки не должна превышать 80 символов. Если она превышает, используйте новую строку для ее отображения и постарайтесь сохранить максимально элегантный формат.
3. Примечания
На этапе кодирования комментарии к переменным, функциям и пакетам должны быть написаны синхронно, и, наконец, документацию можно экспортировать с помощью команды godoc. Комментарии должны быть законченными предложениями, а предложения должны заканчиваться точкой (точкой). Комментарии рекомендуются на английском языке, и вы можете тренировать свои навыки чтения и письма на английском языке в процессе написания кода. И проблем с кодированием на английском не будет.
Каждый пакет должен иметь комментарий пакета, комментарий блока или комментарий строки, предшествующий предложению пакета. Если в пакете несколько файлов go, он должен появиться только в одном файле go.
// ping包实现了常用的ping相关的函数
package ping
4. Именование
Имя, которое нужно дополнить комментарием, не является хорошим именем. Используйте имена с возможностью поиска. Однобуквенные имена и числовые константы трудно найти в большом тексте. Однобуквенные имена применяются только к локальным переменным в коротких методах, и длина имени должна соответствовать его области действия. Если предполагается, что переменная или константа будет использоваться в коде в нескольких местах, ей следует присвоить удобное для поиска имя.
Сделайте значимое различие: нет никакой разницы между Product и ProductInfo и ProductData, Нет никакой разницы между NameString и Name.Чтобы различать имена, различайте их так, чтобы читатель мог определить разницу.
函数命名规则:驼峰式命名,名字可以长但是得把功能,必要的参数描述清楚,
函数名应当是动词或动词短语,如 postPayment、deletePage、save。
并依 Javabean 标准加上 get、set、is前缀。
例如:xxx + With + 需要的参数名 + And + 需要的参数名 + …..
结构体命名规则:结构体名应该是名词或名词短语,
如 Custome、WikiPage、Account、AddressParser,避免使用Manager、Processor、Data、Info、
这样的类名,类名不应当是动词。
包名命名规则:包名应该为小写单词,不要使用下划线或者混合大小写。
接口命名规则:单个函数的接口名以”er”作为后缀,如 Reader,Writer。接口的实现则去掉“er”。
type Reader interface {
Read(p []byte) (n int, err error)
}
// 多个函数接口
type WriteFlusher interface {
Write([]byte) (int, error)
Flush() error
}
5. Константы
Константы должны состоять из всех заглавных букв и разделены символами подчеркивания:
const APP_VER = "1.0"
// 如果是枚举类型的常量,需要先创建相应类型:
type Scheme string
const (
HTTP Scheme = "http"
HTTPS Scheme = "https"
)
6. Переменные
Именование переменных в основном следует соответствующим английским выражениям или аббревиатурам В относительно простой среде (небольшое количество объектов и сильная уместность) Некоторые имена могут быть сокращены от полных слов до отдельных букв, например:
user 可以简写为 u
userID 可以简写 uid
// 若变量类型为 bool 类型,则名称应以 Has, Is, Can 或 Allow 开头:
var isExist bool
var hasConflict bool
var canManage bool
var allowGitHook bool
7. Соглашения об именах переменных
Имена переменных обычно следуют методу верблюжьего падежа, но при встрече с уникальными существительными необходимо соблюдать следующие правила:
Если переменная является частной, а отличительное существительное является первым словом, используйте нижний регистр,
Например: apiClient должен использовать оригинальный способ написания термина в других случаях.
Такие как APIClient, repoID, UserID Плохой пример: UrlArray, следует писать как urlArray или URLArray.
//下面列举了一些常见的特有名词:
"API","ASCII","CPU","CSS","DNS","EOF",GUID","HTML","HTTP",
"HTTPS","ID","IP","JSON","LHS","QPS","RAM","RHS" "RPC", "SLA",
"SMTP","SSH","TLS","TTL","UI","UID","UUID","URI","URL", "UTF8",
"VM","XML","XSRF","XSS"
8. Спецификация структуры
struct申明和初始化格式采用多行,定义如下:
type User struct{
Username string
Email string
}
初始化如下:
u := User{
Username: "test",
Email: "test@gmail.com",
}
9. panic
постарайтесь не паниковать, если вы не знаете, что делаете
10. import
Импортированные пакеты сгруппированы, разделены символами новой строки, и стандартная библиотека является первой группой группы. Если в вашем пакете представлено три типа пакетов: пакеты стандартной библиотеки, внутренние пакеты и сторонние пакеты, Рекомендуется организовать ваш пакет следующим образом
package main
import (
"fmt"
"os"
"kmg/a"
"kmg/b"
"code.google.com/a"
"github.com/b"
)
goimports 会自动帮你格式化
11. Передача параметров
Для небольших объемов данных не передавайте указатели Рассмотрите возможность использования указателей для структур с большими объемами данных. Входящие параметры map, slice, chan не пропускают указатели, Поскольку map, slice, chan являются ссылочными типами, нет необходимости передавать указатели на указатели.
12. Модульное тестирование
单元测试文件名命名规范:
example_test.go
测试用例的函数名称必须以 Test 开头,例如:
func TestExample