github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/talks/2013/bestpractices/bufchanfix.go (about) 1 // +build ignore,OMIT 2 3 package main 4 5 import ( 6 "fmt" 7 "net" 8 "time" 9 ) 10 11 // SEND OMIT 12 func sendMsg(msg, addr string) error { 13 conn, err := net.Dial("tcp", addr) 14 if err != nil { 15 return err 16 } 17 defer conn.Close() 18 _, err = fmt.Fprint(conn, msg) 19 return err 20 } 21 22 // BROADCAST OMIT 23 func broadcastMsg(msg string, addrs []string) error { 24 errc := make(chan error, len(addrs)) // HL 25 for _, addr := range addrs { 26 go func(addr string) { 27 errc <- sendMsg(msg, addr) 28 fmt.Println("done") 29 }(addr) 30 } 31 32 for _ = range addrs { 33 if err := <-errc; err != nil { 34 return err 35 } 36 } 37 return nil 38 } 39 40 // MAIN OMIT 41 func main() { 42 addr := []string{"localhost:8080", "http://google.com"} 43 err := broadcastMsg("hi", addr) 44 45 time.Sleep(time.Second) 46 47 if err != nil { 48 fmt.Println(err) 49 return 50 } 51 fmt.Println("everything went fine") 52 }