Compare commits
No commits in common. "69e53c2d4bb0395e63698b0bc41241d1bebfa911" and "bba7ffe5034626b0f1bbe061f01347755d30400b" have entirely different histories.
69e53c2d4b
...
bba7ffe503
@ -1,20 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import "fmt"
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
// 定义一个channel
|
|
||||||
c := make(chan int)
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
defer fmt.Println("goroutine 结束")
|
|
||||||
fmt.Println("goroutine 正在运行...")
|
|
||||||
// go程中:将值发送给c
|
|
||||||
c <- 666
|
|
||||||
}()
|
|
||||||
|
|
||||||
// 主线程中:读c中的数据并赋值给num
|
|
||||||
num := <-c
|
|
||||||
fmt.Println("num = ", num)
|
|
||||||
fmt.Println("main goroutine 结束 ...")
|
|
||||||
}
|
|
@ -1,35 +0,0 @@
|
|||||||
// 有缓冲的channel
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
c := make(chan int, 3) // 带有缓冲的channel
|
|
||||||
|
|
||||||
fmt.Println("len(c) = ", len(c), ", cap(c) = ", cap(c))
|
|
||||||
|
|
||||||
// 做一个go程
|
|
||||||
go func() {
|
|
||||||
defer fmt.Println("子go程结束")
|
|
||||||
// 如果循环3将不会阻塞,大于3就会阻塞
|
|
||||||
for i := 0; i < 4; i++ {
|
|
||||||
// 把i传递给channel
|
|
||||||
c <- i
|
|
||||||
fmt.Println("子go程正在运行, 发送元素: ", i, ", len(c) = ", len(c), ", cap(c) = ", cap(c))
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
time.Sleep(2 * time.Second)
|
|
||||||
|
|
||||||
for i := 0; i < 4; i++ {
|
|
||||||
num := <-c
|
|
||||||
fmt.Println("num = ", num)
|
|
||||||
// 如果这里不阻塞的话,那么子go程在第2轮之后有可能不会打印
|
|
||||||
time.Sleep(1 * time.Second)
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println("主进程main结束")
|
|
||||||
}
|
|
@ -1,27 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import "fmt"
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
c := make(chan int)
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
for i := 0; i < 5; i++ {
|
|
||||||
c <- i
|
|
||||||
}
|
|
||||||
// close可以关闭一个channel
|
|
||||||
close(c)
|
|
||||||
}()
|
|
||||||
|
|
||||||
for {
|
|
||||||
// 如果ok为true表示channel没有关闭,如果ok为false表示channel已经关闭
|
|
||||||
if data, ok := <-c; ok {
|
|
||||||
fmt.Println(data)
|
|
||||||
} else {
|
|
||||||
fmt.Println("channel c 已被关闭")
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println("Main finished ...")
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import "fmt"
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
c := make(chan int)
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
for i := 0; i < 5; i++ {
|
|
||||||
c <- i
|
|
||||||
}
|
|
||||||
close(c)
|
|
||||||
}()
|
|
||||||
|
|
||||||
for data := range c {
|
|
||||||
fmt.Println(data)
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println("Main finished ...")
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user