package main

import (
	"fmt"
	"os"
)

func DeclaredLoop() []int {
	var funcs []func() int
	for _, n := range []int{1, 2, 3} {
		funcs = append(funcs, func() int { return n })
	}
	var out []int
	for _, f := range funcs {
		out = append(out, f())
	}
	return out
}
func AssignedLoop() []int {
	var n int
	var funcs []func() int
	for _, n = range []int{1, 2, 3} {
		funcs = append(funcs, func() int { return n })
	}
	var out []int
	for _, f := range funcs {
		out = append(out, f())
	}
	return out
}
func main() {
	if len(os.Args) > 1 {
		switch os.Args[1] {
		case "deadlock":
			<-make(chan struct{})
		case "sendclosed":
			c := make(chan int)
			close(c)
			c <- 1
		}
		return
	}
	fmt.Println("declared:", DeclaredLoop())
	fmt.Println("assigned:", AssignedLoop())
}
