Предположим, существует следующая частная структура:
type privateUser struct {
privateName string
PublicName string
}
Есть ли польза от общедоступных полей в частной структуре? Вне пакета вся структура недоступна. Внутри пакета мы можем получить доступ к обоим полям.
Я что-то упускаю, в чем разница между видимостью наличия частного или публичного поля в частной структуре?
Распространенным вариантом использования является кодирование и декодирование с использованием кодирования/json и подобных пакетов.
Reflection позволяет только устанавливать экспортированные поля ( Go Playground).
Как правильно заметила Сериз Лимон , это влияет на то, как эти поля обрабатываются пакетами, использующими отражение, например coding/json.
Кроме того, если у вас есть функция New...
для создания этой структуры в другом пакете, вы все равно можете получить доступ к общедоступным полям, но не можете создать саму структуру. Я предполагаю, что последний вариант использования раздражает, вам, вероятно, не следует этого делать.
Кроме того, многим библиотекам cli необходимы экспортированные поля, чтобы можно было заполнять их из флагов или переменных окружения.
Извиняюсь, в предыдущем комментарии был указан неправильный вопрос как потенциальный дубликат. Это вопрос, на который я должен был сослаться (есть ряд ответов).