package main import( "fmt" "bufio" "os" "math/rand" "sync" "time" ) func main() { filename := os.Args[1] if filename == "" { panic("No filename") } fh,err := os.Open(filename) if err != nil { panic(err) } scanner := bufio.NewScanner(fh) c := make(chan string) var wg sync.WaitGroup for scanner.Scan() { line := scanner.Text() wg.Add(1) go func(l string){ time.Sleep(time.Duration(rand.Intn(30)) * time.Millisecond) c <- l wg.Done() }(line) } go func() { wg.Wait() close(c) }() for { myline, ok := <-c if !ok { return } fmt.Println(myline) } }