Не совсем улавливая подпрограммы и каналы, пожалуйста, разбейте этот код - PullRequest
0 голосов
/ 10 ноября 2019

Я следую краткому введению в Go, и один из примеров:

package main

import (
    "fmt"
    "time"
)

func worker(done chan bool) {
    fmt.Print("working...")
    time.Sleep(time.Second)
    fmt.Println("done")
    done <- true
}

func main() {
    done := make(chan bool, 1)
    go worker(done)
    <-done
}

Я понимаю, что происходит, но, похоже, я не понимаю последовательности событий или ограничений?

  1. Создается канал с именем done с размером буфера 1.
  2. Канал передается в функцию
  3. После завершения таймера он добавляет true логическое значение для канала
  4. Я не уверен, что делает финал <-done, хотя

из: https://gobyexample.com/channel-synchronization

1 Ответ

1 голос
/ 10 ноября 2019

Оператор получателя <-, за которым следует имя канала (в данном случае done), используется для ожидания значения, записанного в канал из рабочей процедуры. (т.е. эта операция чтения будет блокировать. Если вы пропустите <-done, основная программа будет завершена немедленно, даже до запуска рабочей программы, и вы не сможете увидеть результаты)

Вы можете делать все, что хотите<-done как значение: присвоить его другой переменной, передать его в качестве параметра другой функции или просто проигнорировать, как в вашем случае ... и т. Д.

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