Где находится вторая подпрограмма go в этом фрагменте кода, скопированная из примера goby по каналам - PullRequest
0 голосов
/ 06 февраля 2020

Как объясняется на примере goby https://gobyexample.com/channels, там написано

Когда мы запускаем программу, сообщение «ping» успешно передается из одной программы в другую по нашему каналу. но, как я вижу, похоже, что в коде есть только одна go подпрограмма, ie, go func (text string) { messages <- "ping"}(), поэтому я не знаю, из какой подпрограммы go приходит сообщение "ping" и в котором go рутина ставится

package main

import "fmt"

func main() {
   messages := make(chan string)
   go func (text string) { messages <- "ping"}()

   msg := <-messages
   fmt.Println(msg)
}

1 Ответ

1 голос
/ 06 февраля 2020

Go программы начинаются с одной программы. Каждый оператор go добавляет другое. Итак, в вашей программе их два: тот, который стартовал, когда начался main(), и тот, который первым запустился, когда он достиг линии go func ...

func main() {
    messages := make(chan string) // goroutine 1
    go func (text string) {
        messages <- "ping"        // goroutine 2
    }()                           // goroutine 1 starting goroutine 2

    msg := <-messages             // goroutine 1
    fmt.Println(msg)              // goroutine 1
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...