Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: encapsulation, exported, unexported, oop

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

Вопрос проверяет понимание принципов ООП в Go, в частности, как язык реализует механизм ограничения доступа к данным и методам.

Короткий ответ

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

Длинный ответ

1. Основы инкапсуляции в Go:

  • Go не использует ключевые слова private или protected для ограничения доступа.

  • Доступность определяет регистр:

  • Заглавная буква: экспортируемые элементы (public).

  • Строчная буква: элементы остаются приватными для пакета.


 

2. Пример кода:

package main

import "fmt"

// Экспортируемая структура
type Person struct {
    	Name string // Публичное поле
    	age  int    // Приватное поле
}

// Публичный метод
func (p *Person) SetAge(age int) {
    	if age > 0 {
        	p.age = age
    	}
}

// Приватный метод
func (p *Person) getAge() int {
    	return p.age
}

func main() {
    	p := Person{Name: "Alice"}
    	p.SetAge(30)
    	fmt.Println("Name:", p.Name)
    	// fmt.Println("Age:", p.getAge()) // Ошибка: метод приватный
}

 

3. Ограничения инкапсуляции в Go:

  • Нет механизма для ограничения доступа на уровне объекта (все данные приватны или доступны всему пакету).

  • Поля структуры и методы инкапсулируются на уровне пакета.


 

4. В каких случаях использовать:

  • Когда нужно ограничить доступ к полям/методам структуры из других пакетов.

  • Для контроля над изменением внутренних данных через геттеры/сеттеры.

  • При проектировании библиотек с четко определенными интерфейсами.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    2

  • Сложность:

    7

Навыки

  • Golang

    Golang

Ключевые слова

#encapsulation

#exported

#unexported

#oop

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.