Ответ
Да, в Go существуют строгие и идиоматичные соглашения по именованию, которые влияют даже на логику работы программы.
Ключевое правило — видимость (экспорт) идентификатора определяется первой буквой имени.
-
Публичные (экспортируемые) сущности:
- Имена начинаются с заглавной буквы (
PascalCase). - Такие переменные, константы, типы и функции доступны из других пакетов.
- Пример:
var MaxConnections int,func GetUser(id int) User.
- Имена начинаются с заглавной буквы (
-
Приватные (неэкспортируемые) сущности:
- Имена начинаются со строчной буквы (
camelCase). - Доступны только внутри того пакета, где они определены.
- Пример:
var maxConnections int,func getUser(id int) user.
- Имена начинаются со строчной буквы (
Другие важные соглашения:
- Пакеты: Имена пакетов должны быть короткими, лаконичными и в нижнем регистре. Например,
http,json,fmt. - Интерфейсы: Имена интерфейсов, состоящих из одного метода, принято называть, добавляя к имени метода суффикс
-er. Например,Reader,Writer,Stringer. - Константы: Используется
PascalCase, как и для других экспортируемых сущностей. ИспользованиеSNAKE_CASEне является идиоматичным для Go. - Тестовые файлы и функции: Файлы должны заканчиваться на
_test.go. Тестовые функции должны начинаться с префиксаTest, например,func TestCalculateTotal(t *testing.T).
Пример:
package config
// MaxRetries - экспортируемая константа.
const MaxRetries = 3
// User - экспортируемая структура.
type User struct {
ID int // Публичное поле
name string // Приватное поле
}
// NewUser - публичная функция-конструктор.
func NewUser(id int, name string) *User {
return &User{ID: id, name: name}
}
// getName - приватный метод.
func (u *User) getName() string {
return u.name
} Ответ 18+ 🔞
Да ты посмотри, какая в Go, блядь, ебаная магия с именами! Это не просто "как назвать", это, сука, прямо в логику программы лезет, нах!
Вот смотри, главный прикол, от которого можно охуеть: видимость твоей хуйни зависит от первой буквы в имени. Да, ёпта, всё так просто и так пиздецово важно.
-
Если хочешь, чтобы все видели (экспорт):
- Начинай с заглавной буквы, как будто ты важный пиздюк (
PascalCase). - Тогда эту переменную, функцию или тип можно будет тащить из других пакетов.
- Пример:
var MaxConnections int,func GetUser(id int) User. Видишь? С большой буквы — значит, на экспорт, как колбаса за границу.
- Начинай с заглавной буквы, как будто ты важный пиздюк (
-
Если хочешь спрятать в своём пакете (приватность):
- Начинай со строчной буквы, как скромная мартышлюшка (
camelCase). - И тогда эта штука будет доступна только внутри твоего родного пакета, и никакой левый пидарас из соседнего
main.goк ней не подберётся. - Пример:
var maxConnections int,func getUser(id int) user. Маленькая буква — и всё, пиздец, невидимка.
- Начинай со строчной буквы, как скромная мартышлюшка (
А ещё там, блядь, куча других приколов:
- Пакеты называй коротко и по-простому, в нижнем регистре:
http,json,fmt. Не выёбывайся. - Интерфейсы, если в них один метод, называй так: имя метода +
-er.Reader,Writer. Логично же, блядь! - Константы — тоже с большой буквы, если на экспорт. Забудь про
SNAKE_CASE, это не питон тут, ёпта. - Тесты — это вообще отдельная религия. Файл должен называться
*_test.go, а функция —TestЛюбоеНазвание(t *testing.T). Не перепутай, а то нихуя не заработает.
Смотри пример, чтобы вообще всё встало на свои места:
package config
// MaxRetries — вот эта константа, блядь, экспортируется. Все её увидят.
const MaxRetries = 3
// User — и эта структура тоже. Публичная персона.
type User struct {
ID int // Поле публичное, с большой буквы
name string // А это поле — приватное, спрятано. Ни хуя не видно снаружи.
}
// NewUser — публичная функция, можно звать отовсюду.
func NewUser(id int, name string) *User {
return &User{ID: id, name: name}
}
// getName — а это приватный метод. Только внутри пакета `config` его можно вызвать.
// Снаружи про него нихуя не знают.
func (u *User) getName() string {
return u.name
}
Вот и вся философия. Либо ты звезда с большой буквы, либо скромняга в тени. Go тебя быстро, блядь, приучит к порядку, а то получишь ошибку компиляции в ебало.