packagemain
import(
"fmt"
"math/rand"
"sync"
"time"
)
funcmain() {
ashleyMsg := make(chanstring)
brianMsg := make(chanstring)
exit := make(chanstruct{})
rand.Seed(time.Now().UnixNano())
varwg sync.WaitGroup
gofunc() {
numJob := rand.Intn(10)
fmt.Println("number of jobs:", numJob)
fori := 0; i < numJob; i++ {
wg.Add(2)
gofunc() {
deferwg.Done()
time.Sleep(time.Duration(rand.Intn(10)) * time.Millisecond)
ashleyMsg <- "hi"
}()
gofunc() {
deferwg.Done()
time.Sleep(time.Duration(rand.Intn(10)) * time.Millisecond)
brianMsg <- "what's up"
}()
}
wg.Wait()
close(exit)
}()
for{
select{
caseres1 := <-ashleyMsg:
fmt.Println("ashley:", res1)
caseres2 := <-brianMsg:
fmt.Println("brian:", res2)
case<-exit:
fmt.Println("chat ended")
return
default:
fmt.Println("...")
time.Sleep(time.Millisecond)
}
}
}