github.com/maikovskiys/l1tasks@v0.0.0-20230927052451-6436d7687dc9/develop/dev05/main.go (about) 1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "time" 7 ) 8 9 /* 10 Разработать программу, которая будет последовательно отправлять значения в канал, а с другой стороны канала — читать. 11 По истечению N секунд программа должна завершаться. 12 */ 13 14 const N = 5 //timeout in seconds 15 16 func main() { 17 input := make(chan int) 18 ctx, cancel := context.WithTimeout(context.Background(), time.Second*N) 19 defer cancel() 20 go func(context.Context, chan int) { 21 i := 0 22 for { 23 select { 24 case <-ctx.Done(): 25 fmt.Println("ctx Done") 26 close(input) 27 return 28 default: 29 input <- i 30 } 31 i++ 32 } 33 }(ctx, input) 34 35 for value := range input { 36 fmt.Println(value) 37 _ = value 38 } 39 fmt.Println("main end") 40 }