Channel通道
package main
import (
"fmt"
"time"
)
var ch = make(chan int)
func Printer(str string) {
for _, data := range str {
fmt.Printf("%c", data)
time.Sleep(time.Second)
}
fmt.Printf("\n")
}
func Person1() {
Printer("hello")
ch <- 7
}
func Person2() {
<-ch //通道中獲取不到數據時會阻塞等待
Printer("world")
}
func main() {
go Person1()
go Person2()
for {
}
}
var ch = make(chan int,10)
package main
import (
"fmt"
)
func main() {
ch := make(chan int)
go func() {
for i := 0; i < 5; i++ {
ch <- i
}
close(ch)
}()
for {
if k, ok := <-ch; ok == true { //通過 ok 判斷通道是否關閉
fmt.Println(k)
} else {
break
}
}
//可以使用 range 讀取通道中的數據,通道關閉後自動跳出循環
for num := range ch {
fmt.Println(num)
}
}
package main
import (
"fmt"
)
func producer(out chan<- int) {
for i := 0; i < 5; i++ {
out <- i * i
}
close(out)
}
func consumer(in <-chan int) {
for num := range in {
fmt.Println(num)
}
}
func main() {
ch := make(chan int)
go producer(ch)
consumer(ch)
}