Что такое соглашения об именовании полей Golang Struct? - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь изучить Go, используя код Visual Studio, и я предполагаю, что он использует линтер Go. Я создал эту структуру для отображения объекта JSON.

type someAPI struct {
    ApiEndpoint string   `json:"apiEndpoint"`
    ApiVersion  string   `json:"apiVersion"`
    ...
}

И я получаю эти предупреждения ...

Поле структуры ApiEndpoint должно быть APIEndpoint

Поле структуры ApiVersion должно быть APIVersion

Я провел поиск в Google и не могу найти никаких требований к именам структурных полей, касающихся этого. Самое большее, что я обнаружил, это то, что если вы хотите сделать поле публичным, вы должны сделать его заглавным.

Так почему же этот линтер предупреждает меня об этих именах?

Я провел некоторое тестирование, изменив Api на Abc, и линтер не предупредил меня сменить его на «ABC». Поэтому я должен предположить, что он проверяет имена, начинающиеся с «Api».

Что такое соглашения Go для имен полей? Или, другими словами, есть ли другие соглашения, о которых я должен знать?

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Как упомянуто здесь в вашем вопросе и в ответе @ topo, соглашение для именования переменных и функций - Camel Case (смешанные заглавные буквы). Если имя начинается с заглавной буквы, переменную / функцию можно экспортировать.

Пакеты всегда в нижнем регистре.

Интерфейсы должны заканчиваться на -er

Вы можете прочитать больше в эффективном сеансе именования go

Golint, с другой стороны, выходит за рамки соглашения Go для именования. Есть несколько правил для слов, и в вашем случае вы выполняете одно из правил. Вы можете увидеть полный список здесь: https://github.com/golang/lint/blob/master/lint.go#L751

0 голосов
/ 17 сентября 2018

В большинстве случаев соглашение о присвоении имен в Go состоит в том, чтобы использовать только верблюжий регистр и начинать с верхнего регистра, если это открытое поле, и нижнего регистра, если это не так. Но в словах, которые являются аббревиатурами, такими как API или URL, они написаны в верхнем регистре, например. func ProxyURL(fixedURL *url.URL) в пакете http .

РЕДАКТИРОВАТЬ: Я искал немного больше, и в Go Code Review Комментарии есть рекомендации для сокращений. В разделе Инициализмы говорится:

Слова в именах, которые являются инициализмами или аббревиатурами (например, «URL» или «NATO») иметь последовательный случай. Например, «URL» должен отображаться как «URL» или «url» (как в «urlPony» или «URLPony»), никогда не «Url». В качестве примера: ServeHTTP не ServeHttp. Для идентификаторов с несколькими инициализированными «слова», используйте, например, «xmlHTTPRequest» или «XMLHTTPRequest».

Это правило также применяется к «идентификатору», когда оно сокращенно от «идентификатора», поэтому напишите «appID» вместо «appId».

Таким образом, правило для аббревиатур состоит в том, что они должны иметь постоянный регистр. В вашем случае, поскольку они должны начинаться с заглавной буквы «А», вы должны написать их как «API».

Кроме того, это только мое личное мнение, и я знаю, что код в примере, возможно, не является точным кодом, который вы используете, но если это так, я считаю плохой практикой включать имя структуры в имена полей. Вы делаете api.APIField, но api.Field легче читать, и если вы знаете, что объект является API, то нет никаких сомнений в том, что Поле принадлежит API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...