Я абсолютный новичок на Голанге.Я учусь через Tour of Go, а затем воплощаю идеи с моим собственным пониманием.У меня проблемы с горутинами.Я создал небуферизованный канал, а затем отправил строку на этот канал.
func main() {
p := make(chan string)
p <- "Hello goroutine"
fmt.Println(<-p)
}
throws error
фатальная ошибка: все программы находятся в спящем режиме - тупик!
Я понял, канал небуферизован.( Вот в чем причина. Верно? ).
Но когда я рефакторирую p <- "Hello goroutine
в goroutine
func main() {
p := make(chan string)
go sendHello(p)
fmt.Println(<-p)
}
func sendHello(p chan string) {
p <- "Hello goroutine"
}
Это работает без проблем.Я читал, что нам не нужно использовать указатели с картами, срезами и каналами в большинстве случаев для изменения значения. Был channel p
передан func sendHello(p chan string)
через копию, которая имела отдельный буфер .Я до сих пор не могу разобраться с этим.