chan // 可以向此通道中读写数据
<-chan // 只能从此通道中读取数据
chan<- // 只能向此通道中写入数据
package main
import "fmt"
func main() {
rwCh := rw()
//从读写通道中读取数据 可以读取
fmt.Println(<-rwCh)
//向读写通道中写入数据 可以写入
rwCh <- "像读写通道写入数据2"
//从读写通道中读取数据 可以读取
fmt.Println(<-rwCh)
rCh := r()
//从只读通道中读取数据 可以正常读取
fmt.Println(<-rCh)
//向只读通道写入数据 编译器报错
rCh <- "向只读通道写入数据2"
wCh := w()
//向只写通道写入数据 可以写入
wCh <- "向只写通道写入数据1"
//从只写通道中读取数据 编译器报错
fmt.Println(<-wCh)
}
func rw() chan string {
c := make(chan string)
go func() {
c <- "向读写通道写入数据1"
}()
return c
}
func r() <-chan string {
c := make(chan string)
go func() {
c <- "向只读通道写入数据1"
}()
return c
}
func w() chan<- string {
c := make(chan string)
go func() {
for {
select {
case d := <-c:
fmt.Println(d)
}
}
}()
return c
}