go context.WithCancel
func func3() {
gen := func(ctx context.Context) <-chan int {
dst := make(chan int)
go func() {
defer func() {
fmt.Println("exit inside")
}()
var n int
for {
...