Рекомендованные Golang соглашения об именах

Go

Люди редко обобщают некоторые соглашения об именах, или может быть, что автор невежественен.Как двухлетний разработчик golang, я основывался на многих известных проектах, таких какmoby, kubernetesset al обобщает некоторые распространенные соглашения об именах. Соглашения об именах могут сделать код более легким и легким для чтения и менее подверженным ошибкам.

Если у вас есть разные мнения, пожалуйста, комментируйте и обсуждайте.адрес проекта

соглашение об именах файлов

Поскольку файл не имеет ничего общего с пакетом и позволяет избежать проблем с регистром Windows, рекомендуемые характеристики следующие: Имена файлов всегда должны быть в нижнем регистре, а разные слова должны быть разделены символом подчеркивания, имя должно быть максимально знакомым.

Постоянное соглашение об именах

Константы четко названы с верблюжьим регистром. Примеры следующие:

const todayNews = "Hello"

// Если есть более одной константы, они должны быть заключены в круглые скобки

const (
   systemName = "What"
   sysVal = "dasdsada"
)

соглашение об именах переменных

Как и в случае с постоянными именами, переменные также должны быть названы в верблюжьем регистре, но старайтесь не согласовываться с именем пакета или начинать с имени пакета.

var  x string
x := new(string)

соглашение об именах функций

Из-за специфики Golang (вариант использования для управления видимостью функций), за исключением специальных функций тестирования производительности и модульного тестирования, следует придерживаться следующих принципов.

  1. использовать верблюжий чехол
  2. Если вам не нужен доступ вне пакета, начните функцию с нижнего регистра
  3. Если вам нужно выставить его за пределы пакета, вам нужно использовать имя функции, начинающееся с прописной буквы

Типичный метод именования функций выглядит следующим образом:

// 注释一律使用双斜线, 对象暴露的方法
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