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  }