Какова основная роль типа sync.Once в синхронизации потоков в Go?

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

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

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

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

Основная роль — безопасная инициализация ресурсов (например, создание синглтона), чтобы избежать гонок и повторного выполнения.

Пример:

var once sync.Once
var config *Config

func loadConfig() {
    config = &Config{/* инициализация */}
}

func GetConfig() *Config {
    once.Do(loadConfig) // loadConfig вызовется только один раз
    return config
}

Таким образом, sync.Once обеспечивает потокобезопасное однократное выполнение функции.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее