Люди редко обобщают некоторые соглашения об именах, или может быть, что автор невежественен.Как двухлетний разработчик golang, я основывался на многих известных проектах, таких какmoby
, kubernetess
et al обобщает некоторые распространенные соглашения об именах.
Соглашения об именах могут сделать код более легким и легким для чтения и менее подверженным ошибкам.
Если у вас есть разные мнения, пожалуйста, комментируйте и обсуждайте.адрес проекта
соглашение об именах файлов
Поскольку файл не имеет ничего общего с пакетом и позволяет избежать проблем с регистром Windows, рекомендуемые характеристики следующие: Имена файлов всегда должны быть в нижнем регистре, а разные слова должны быть разделены символом подчеркивания, имя должно быть максимально знакомым.
Постоянное соглашение об именах
Константы четко названы с верблюжьим регистром. Примеры следующие:
const todayNews = "Hello"
// Если есть более одной константы, они должны быть заключены в круглые скобки
const (
systemName = "What"
sysVal = "dasdsada"
)
соглашение об именах переменных
Как и в случае с постоянными именами, переменные также должны быть названы в верблюжьем регистре, но старайтесь не согласовываться с именем пакета или начинать с имени пакета.
var x string
x := new(string)
соглашение об именах функций
Из-за специфики Golang (вариант использования для управления видимостью функций), за исключением специальных функций тестирования производительности и модульного тестирования, следует придерживаться следующих принципов.
- использовать верблюжий чехол
- Если вам не нужен доступ вне пакета, начните функцию с нижнего регистра
- Если вам нужно выставить его за пределы пакета, вам нужно использовать имя функции, начинающееся с прописной буквы
Типичный метод именования функций выглядит следующим образом:
// 注释一律使用双斜线, 对象暴露的方法
func (*fileDao) AddFile(file *model.File) bool {
result := db.NewRecord(*file)
if result {
db.Create(file)
}
return result
}
// 不需要给包外访问的函数如下
func removeCommaAndQuote(content string) string {
re, _ := regexp.Compile("[\\`\\,]+")
return strings.TrimSpace(re.ReplaceAllString(content, ""))
}
соглашение об именах интерфейсов
Именование интерфейса также должно соответствовать названию верблюжьего регистра.Вы можете использовать псевдоним типа, чтобы определить тип, начинающийся с прописной буквы для доступа вне пакета.
type helloWorld interface {
func Hello();
}
type SayHello helloWorld
Соглашение об именовании структур
Аналогично соглашению об именовании интерфейсов
соглашение об именах получателей
Концепция приемника существует в golang Имя получателя должно быть как можно более последовательным, избегая this, super и других семантических ключевых слов на других языках, как показано ниже.
type A struct{}
func (a *A) methodA() {
}
func (a *A) methodB() {
a.methodA()
}
Спецификация аннотации
Комментарии всегда должны использовать двойную косую черту
разное
Форматирование, использование табуляции вместо пробелов, совместимость с go fmt