Тип 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 обеспечивает потокобезопасное однократное выполнение функции.