Not quite what you asked for but rather than use N goroutines, why not slurp in
the whole file in a list ([]string) of lines and then output them in random
order? Something like
for _, i := range deal(len(lines)) {
fmt.Println(lines[i])
}
Where you'd write deal(n) to return a list of n numbers in range 0..n-1 in a
randomized order, without repeating a number.
> On Sep 20, 2016, at 3:43 AM, Unknown User <[email protected]> wrote:
>
> Hi All,
>
> I am trying to print the contents of a file randomizing the lines.
> The following code works, but does not exit even after all the lines are read.
> What needs to be done to correct it?
>
> package main
>
> import(
> "fmt"
> "bufio"
> "os"
> "math/rand"
> "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)
> for scanner.Scan() {
> line := scanner.Text()
> err := scanner.Err()
> if err != nil {
> close(c)
> }
> go func(l string){
> time.Sleep(time.Duration(rand.Intn(30)) * time.Millisecond)
> c <- l
> }(line)
> }
> for {
> select {
> case myline := <- c:
> fmt.Println(myline)
> default:
> break
> }
> }
> }
>
> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.