package
0.0.0-20210926191209-7a80dc5b57fc
Repository: https://github.com/abr-iv13/wb-tech.git
Documentation: pkg.go.dev
# README
7. Or channel.
-
Реализовать функцию, которая будет объединять один или более done каналов в single канал если один из его составляющих каналов закроется.
-
Одним из вариантов было бы очевидно написать выражение при помощи select, которое бы реализовывало эту связь, однако иногда неизестно общее число done каналов, с которыми вы работаете в рантайме.
-
В этом случае удобнее использовать вызов единственной функции, которая, приняв на вход один или более or каналов, реализовывала весь функционал.
-
Определение функции:
var or func(channels ...<- chan interface{}) <- chan interface{}
Пример использования функции:
sig := func(after time.Duration) <- chan interface{} {
c := make(chan interface{})
go func() {
defer close(c)
time.Sleep(after)
}()
return c
}
start := time.Now()
<-or (
sig(2*time.Hour),
sig(5*time.Minute),
sig(1*time.Second),
sig(1*time.Hour),
sig(1*time.Minute),
)
fmt.Printf(“fone after %v”, time.Since(start))