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  }