diff --git a/foo.go b/foo.go new file mode 100644 index 0000000..e93761e --- /dev/null +++ b/foo.go @@ -0,0 +1,28 @@ +package main + +import ( + "fmt" + "sync" +) + +func main() { + c := make(chan string, 5) + w := sync.WaitGroup{} + w.Add(1); go func() { v, ok := <-c; fmt.Printf("done %s %t\n", v, ok); w.Done() }() + w.Add(1); go func() { v, ok := <-c; fmt.Printf("done %s %t\n", v, ok); w.Done() }() + w.Add(1); go func() { v, ok := <-c; fmt.Printf("done %s %t\n", v, ok); w.Done() }() + c<-"foo" + //c<-"foo" + //c<-"foo" + //c<-"foo" + //c<-"foo" + //c<-"foo" + close(c) + fmt.Println("closed") + w.Add(1); go func() { v, ok := <-c; fmt.Printf("done %s %t\n", v, ok); w.Done() }() + w.Add(1); go func() { v, ok := <-c; fmt.Printf("done %s %t\n", v, ok); w.Done() }() + w.Add(1); go func() { v, ok := <-c; fmt.Printf("done %s %t\n", v, ok); w.Done() }() + w.Add(1); go func() { v, ok := <-c; fmt.Printf("done %s %t\n", v, ok); w.Done() }() + w.Add(1); go func() { v, ok := <-c; fmt.Printf("done %s %t\n", v, ok); w.Done() }() + w.Wait() +} diff --git a/foo2.go b/foo2.go new file mode 100644 index 0000000..6fef5b8 --- /dev/null +++ b/foo2.go @@ -0,0 +1,7 @@ +package main + +func main() { + c := make(chan string, 1) + c<-"foo" + <-c +}