Ответ
В Go нет классического наследования и модификаторов доступа private, но можно скрыть объекты, используя:
- Неэкспортируемые имена (начинаются с маленькой буквы) - доступны только в текущем пакете:
type hiddenStruct struct { // неэкспортируемый тип
field int // неэкспортируемое поле
}
- Интерфейсы - можно вернуть только интерфейс, скрыв реализацию:
type PublicInterface interface {
Method()
}
func New() PublicInterface {
return &hiddenImpl{}
}
type hiddenImpl struct{} // скрытая реализация
func (h *hiddenImpl) Method() {}
- Вложенные структуры - можно встроить неэкспортируемую структуру в экспортируемую:
type PublicStruct struct {
hidden hiddenStruct
}