Pull to refresh
0
Send message
func operation(ch chan<- string) {
    // Имитация длительной операции
    time.Sleep(2 * time.Second)
    ch <- "результат операции"
}

func main() {
    ch := make(chan string)
    go operation(ch)

    select {
    case res := <-ch:
        fmt.Println(res)
    case <-time.After(1 * time.Second):
        fmt.Println("Тайм-аут операции")
    }
}

Автор, в данном примере есть потенциальная утечка горутины. Понятно, что в данном случае у вас выход из программы сразу происходит, но для людей, читающих ваш пример, может создастся впечатление, что так нужно делать всегда, независимо от контекста.

Я бы добавил небольшую пометку о том, что тут будет "повисшая" горутина: и она будет висесть, пока из канала не прочитают.

Либо, можно было бы этот пример реализовать через буферизованный канал с величиной буфера '1', тогда рутина не повиснет на 4ой строчке.

Information

Rating
Does not participate
Registered
Activity