Как скрыть объект в Go

«Как скрыть объект в Go» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Go нет классического наследования и модификаторов доступа private, но можно скрыть объекты, используя:

  1. Неэкспортируемые имена (начинаются с маленькой буквы) - доступны только в текущем пакете:
type hiddenStruct struct { // неэкспортируемый тип
    field int // неэкспортируемое поле
}
  1. Интерфейсы - можно вернуть только интерфейс, скрыв реализацию:
type PublicInterface interface {
    Method()
}

func New() PublicInterface {
    return &hiddenImpl{}
}

type hiddenImpl struct{} // скрытая реализация
func (h *hiddenImpl) Method() {}
  1. Вложенные структуры - можно встроить неэкспортируемую структуру в экспортируемую:
type PublicStruct struct {
    hidden hiddenStruct
}