once.Do() не отрабатывает
Изучаю Golang и столкнулся с тем что пример из официальной документации не отрабатывает как ожидается ссылка на пример
Код который я запускаю:
package main
import (
"sync"
)
var a string
var once sync.Once
func setup() {
a = "hello, world"
}
func doprint() {
once.Do(setup)
print(a)
}
func twoprint() {
go doprint()
go doprint()
}
func main() {
twoprint()
}
hello world не печатается, хотя дока говорит что должно печататься дважды
Версия Go 1.16.5
Ответы (1 шт):
Автор решения: Senior Pomidor
→ Ссылка
twoprint запускакет в отдельной горутине печатание, передает управление в main. main-у остается только завершить программу, потому что нечего ему еще делать.
тут нужно дожидаться завершения всех горутин. смотрите на WaitGroup. Либо сделать костыль и ждать секунду, пока горутины не отработают. https://play.golang.org/p/BCW655UjeUV
package main
import (
"sync"
"time"
)
var a string
var once sync.Once
func setup() {
a = "hello, world"
}
func doprint() {
once.Do(setup)
println(a)
}
func twoprint() {
go doprint()
go doprint()
}
func main() {
twoprint()
time.Sleep(time.Second)
}