47 lines
690 B
Go
47 lines
690 B
Go
|
package closingchannels
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"math"
|
||
|
"math/rand"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
func ClosingChannels() {
|
||
|
jobs := make(chan int, 5)
|
||
|
done := make(chan bool)
|
||
|
|
||
|
go func() {
|
||
|
for {
|
||
|
val, more := <-jobs
|
||
|
|
||
|
if more {
|
||
|
time.Sleep(time.Duration(rand.Intn(3)) * time.Second)
|
||
|
fmt.Printf("%d ^ %d is %f\n", val, 2, math.Pow(float64(val), 2))
|
||
|
} else {
|
||
|
fmt.Println("No more jobs, goroutine exiting")
|
||
|
done <- true
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
}()
|
||
|
|
||
|
for i := range 3 {
|
||
|
jobs <- i + 1
|
||
|
}
|
||
|
fmt.Println("Sent all jobs")
|
||
|
|
||
|
close(jobs)
|
||
|
|
||
|
<-done
|
||
|
|
||
|
_, more := <-jobs
|
||
|
if more {
|
||
|
fmt.Println("Uh-oh, jobs queue is not empty")
|
||
|
} else {
|
||
|
fmt.Println("Jobs queue is empty")
|
||
|
}
|
||
|
|
||
|
fmt.Println("Exiting")
|
||
|
}
|