В Go инкапсуляция реализуется через регистр первой буквы:
- Заглавная (exported):
User,GetName()— доступно из других пакетов - Строчная (unexported):
user,getName()— только внутри пакета
type User struct {
Name string // exported
email string // unexported — доступ только внутри пакета
}
Уровень инкапсуляции — пакет, а не структура. Все файлы одного пакета видят unexported поля друг друга. Это проще чем private/protected/public в Java, но требует грамотной декомпозиции по пакетам.