Ответ
В Go приватность переменных определяется регистром первой буквы имени:
- Приватная (неэкспортируемая) - начинается со строчной буквы. Доступна только в пределах своего пакета.
- Публичная (экспортируемая) - начинается с заглавной буквы. Доступна из других пакетов.
Пример:
package mypkg
var privateVar int // приватная, доступна только в mypkg
var PublicVar string // публичная, доступна извне
Важные нюансы:
- Приватность работает на уровне пакетов, а не структур
- Даже приватные поля структур можно читать/менять через рефлексию
- Вложенные пакеты не имеют доступа к приватным переменным родительского пакета