Я пытаюсь понять, как я могу исправить это состояние гонки для приведенного ниже кода.
sayHello := func() {
fmt.Println("Hello from goroutine")
}
go sayHello()
time.Sleep(1)
fmt.Println("Hello, playground")
Ожидание : я просто хочу знать, какое решение лучше, если я буду использоватьWaitGroup или есть какое-то лучшее решение?
Итак, я придумала следующее решение:
var wg sync.WaitGroup
//defer wg.Wait()
sayHello := func() {
defer wg.Done()
fmt.Println("Hello from goroutine")
}
wg.Add(1)
go sayHello()
wg.Wait()
fmt.Println("Hello, playground")
Но это блокирует основную программу, пока код не будет выполнен!
Также, если я использую defer wg.Wait()
, вывод будет другим!https://play.golang.org/p/_xkLb7HvNF8
Состояние гонки. Я имел в виду, что go sayHello()
никогда даже не выполняется, потому что основной функционал завершится еще до того, как программа была запущена.Следовательно, это создает условия гонки, если я пытаюсь поставить время. Сон