57 lines
972 B
Go
57 lines
972 B
Go
package main
|
||
|
||
import (
|
||
"fmt"
|
||
"sync"
|
||
)
|
||
|
||
// channel练习
|
||
|
||
var WG sync.WaitGroup
|
||
|
||
// 1.启动一个goroutine生成100个数字,发送到ch1
|
||
func set100Num(ch1 chan<- int) { //在声明后添加符号类型表示单向通道
|
||
defer WG.Done()
|
||
for i := 0; i < 100; i++ {
|
||
ch1 <- i
|
||
}
|
||
close(ch1)
|
||
}
|
||
|
||
// 2.启动一个goroutine从ch1中取值,计算其平方,放到ch2中
|
||
func get100Num(ch1 <-chan int, ch2 chan<- int) {
|
||
defer WG.Done()
|
||
for {
|
||
x, ok := <-ch1
|
||
if !ok {
|
||
break
|
||
}
|
||
ch2 <- x * x
|
||
}
|
||
close(ch2)
|
||
}
|
||
|
||
//3.在main函数中从ch2中取值,打印出来
|
||
|
||
func main() {
|
||
e := make(chan int, 50)
|
||
f := make(chan int, 100)
|
||
WG.Add(2)
|
||
go set100Num(e)
|
||
go get100Num(e, f)
|
||
WG.Wait()
|
||
for ret := range f {
|
||
fmt.Printf("通道中数字的平方是:%v\n", ret)
|
||
}
|
||
ch3 := make(chan int, 2)
|
||
ch3 <- 10
|
||
ch3 <- 20
|
||
<-ch3
|
||
<-ch3
|
||
close(ch3) //取完值后关闭通道
|
||
t, ok := <-ch3
|
||
//第三次仍能取到
|
||
fmt.Println("第三此取出的值为", ok, t)
|
||
|
||
}
|