Позвольте мне использовать пример:
func WaitForStringOrTimeout() (string, error) {
my_channel := make(chan string)
go WaitForString(my_channel)
select {
case found_string := <-my_channel:
return found_string, nil
case <-time.After(15 * time.Minute):
return nil, errors.New("Timed out waiting for string")
}
}
В этом простом примере у меня есть некоторая функция WaitForString, которая блокируется на некоторое время и в конечном итоге может вернуть строку. Я хочу обернуть WaitForString этим кодом, который либо возвращает ту же строку, либо истекает с ошибкой.
Если строка найдена быстро, где-то все еще работает горутина с 15-минутным оператором сна или этот мусор как-то собирается?
Если время ожидания истекло, а строка так и не была найдена, существует ли горутина, выполняющая WaitForString, даже если нет других подпрограмм, которые могли бы наблюдать за ее выводом? Что, если WaitForString выделяет много памяти, но никогда не возвращается?
Есть ли способ заставить WaitForString() узнать о тайм-ауте и сдаться?
WaitForString
, я не думаю, что есть способ очистить горутину, обернув ее. - person az_   schedule 18.02.2014