Sobes.tech
Junior — Middle

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

sobes.tech AI

Отговор от AI

Типът sync.Once в Go се използва, за да гарантира, че определен фрагмент от код ще бъде изпълнен точно веднъж, дори ако е извикан от няколко нишки (goroutines).

Основната му роля е безопасната инициализация на ресурси (например създаване на сингълтън), за да се избегнат състезателни условия и повторно изпълнение.

Пример за използване:

var once sync.Once
var config *Config

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

func GetConfig() *Config {
    once.Do(loadConfig) // loadConfig ще бъде извикан само веднъж
    return config
}

По този начин sync.Once осигурява потокобезопасно еднократно изпълнение на функция.