тупик на Голанге - PullRequest
       2

тупик на Голанге

0 голосов
/ 25 июня 2019

Я знаю, что обмен строк 15 и 17 не дает ошибок, однако я не понимаю, почему обмен не дает тупиковую ситуацию

package main

import (
    "fmt"

)

func greet(c chan string) {
    fmt.Println("Hello " + <-c + "!")
}

func main() {
    c := make(chan string)
    //line15
    c <- "John"
    //line17
    go greet(c)

}

фатальная ошибка: все программы находятся в спящем режиме - тупик!

Ответы [ 2 ]

3 голосов
/ 25 июня 2019

Канал c небуферизован.Связь по небуферизованному каналу не продолжается до тех пор, пока отправитель и получатель не будут готовы.

Программа блокируется, потому что ни один из получателей не готов, когда основная программа выполняет операцию отправки.

0 голосов
/ 25 июня 2019

Вы можете сделать что-то вроде этого

package main

import (
    "fmt"
    "sync"
)

func greet(c chan string, wg *sync.WaitGroup) {
    defer wg.Done()
    fmt.Println("Hello " + <-c + "!")
}

func main() {
    c := make(chan string, 10)
    //line15
    c <- "John"
    //line17
    var wg sync.WaitGroup
    wg.Add(1)
    go greet(c, &wg)
    c <- "Alex"
    wg.Add(1)
    go greet(c, &wg)
    wg.Wait()

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...