Спецификация языкового кода GO

Go

Инструмент разработки: GoLand

Официальная спецификация кода: https://golang.org/doc/efficient_go.html

1. Инструменты

  • Перед отправкой кода вам необходимо использовать инструмент fmt для форматирования
  • Перед отправкой кода вам необходимо использовать инструмент vet для статической проверки.

2. Спецификация каталога

|– корзина

| - построить

|–build_dev/test/release.sh

|– ген-го

|–конфигурация

|– dev/test/release.yml

|– упаковка

|-Контроллер

|–к

|–rpc

|–обслуживание

|–*_impl.go

|–*_test.go

| - * _ Mock.go

| - продавец

|– readme.face

3. Соглашения об именах

  1. документ
    • нижний регистр + подчеркивание
  2. именование пакетов
    • Имя пакета и каталог должны быть согласованы, чтобы избежать конфликтов со стандартной библиотекой.
    • Избегайте импорта относительных путей
  3. метод/интерфейс
    • CamelCase
    • Не внешние методы, первая буква должна быть строчной
  4. Переменная
    • CamelCase
  5. постоянный
  • верхний регистр + подчеркивание

4. Примечания

  • в состоянии пройти/* …… */или// ……добавить заметки,//должен сопровождаться пробелом
  • Содержимое комментария должно быть выше файла/метода/переменной.

5. Исключение

  • Исключения должны быть оценены и обработаны
  • Не присваивать ошибку анонимной переменной_

6. Другое

  • Не допускается вызов Panic в логике, выберите log.Fatal из лога
  • Не вызывайте отсрочку часто
  • Вернитесь как можно скорее, как только произойдет ошибка, вернитесь немедленно
  • если принимает оператор инициализации и соглашается создать локальные переменные следующим образом

    if err := file.Chmod(0664); err != nil {
        return err
    }
  • Имя получателя метода обычно берет первую букву strcut и пишется в нижнем регистре, а не это, я или я.

type rpcClient struct {
       once sync.Once
}
func (r *rpcClient) newCodec(contentType string) (codec.NewCodec, error) {
       //
}

  • Для переменных типа BOOLvar b bool, используйте его непосредственно как условие суждения, вместо того, чтобы использовать его для сравнения истинного/ложного
  • Сравнение равенства байтов и строк, используйте Equal
  • Когда получателем является map, chan, func, не используйте передачу указателя, потому что они сами являются ссылочными типами.
  • Когда получателем является срез, а функция не срезает и не перераспределяет слайс, не используйте передачу указателя.
  • Когда приемник нужно модифицировать внутри функции, он должен быть передан указателем
  • когда получатель является структурой и содержитsync.MutexИли аналогичный член для синхронизации. Вы должны использовать указатель, чтобы члены не копировали
  • Когда тип получателя является структурой и очень большой, или большим массивом, рекомендуется использовать передачу указателя для повышения производительности, а в других сценариях можно использовать передачу значения.