Назад к вопросам
Junior
107
questionbank

Как реализована инкапсуляция в Golang?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Инкапсуляция в Golang реализуется через контроль видимости идентификаторов (таких как переменные, функции, структуры, методы, пакеты) на уровне пакета.

  1. Приватность: Идентификаторы, имена которых начинаются с маленькой буквы, видны только внутри пакета, в котором они объявлены.
    package mypackage
    
    type myStruct struct { // приватная структура
        privateField int // приватное поле
        PublicField  string // публичное поле
    }
    
    func privateFunc() { // приватная функция
        // ...
    }
    
    func PublicFunc() { // публичная функция
        // ...
    }
    
  2. Публичность: Идентификаторы, имена которых начинаются с большой буквы, видны за пределами пакета, в котором они объявлены. Они могут быть доступны из других пакетов путем импорта и использования имени пакета.
    package anotherpackage
    
    import "mypackage"
    
    func useStruct() {
        // mypackage.privateFunc() // Ошибка: приватная
        // var s mypackage.myStruct // Ошибка: приватная структура
    
        var sPublic mypackage.MyPublicStruct // Доступно, если MyPublicStruct публичная
        sPublic.PublicField = "доступно"
        // sPublic.privateField = 10 // Ошибка: приватное поле
    
        mypackage.PublicFunc() // Доступно
    }
    

Инкапсуляция достигается тем, что детали реализации (приватные идентификаторы) скрыты от внешнего использования и взаимодействия с объектом осуществляется только через его публичный интерфейс (публичные идентификаторы). Это позволяет изменять внутреннюю реализацию без необходимости менять код, использующий этот пакет извне, при условии сохранения публичного интерфейса.

Golang не имеет ключевых слов public, private или protected как в некоторых других языках. Контроль доступа основан исключительно на регистре первой буквы идентификатора.