关于go:大意遇到的初级坑chan的读取参数的问题

invalid operation: range ch (receive from send-only type chan<- int)

package main
 
import (
    "fmt"
    "os"
    "os/signal"
    "syscall"
)
// 向chan 发送数据,只能向chan里写数据
func producters(factor int,c chan<- int)  {
    for i:=1; i<10;i++  {
        c<- factor * i
    }
}
// 承受参数,
// 只能取channel中的数据,千万不要写成chan<-
// 不然会报错:
// ./producersAndConsumers.go:24:9:
// invalid operation: range ch (receive from send-only type chan<- int)
func consumers(ch <-chan int)  {
    for v:=range ch  {
        fmt.Println("reev:",v)
    }
}
func main()  {
 
    var status chan int
    if status == nil {
        fmt.Println("未初始化的chan 值是nil")
    }
    status = make(chan int)
    status <- 1
    status <- 2
    // 如果塞值超过 设置的chan 缓冲值,或者是个无缓冲的chan,当超过容量就回呈现死锁
 
    ch:=make(chan int,10)
    go producters(2,ch)
    go producters(3,ch)
    go consumers(ch)
 
 
    // Ctrl+C 退出
    sig := make(chan os.Signal, 1)
    signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM)
    fmt.Printf("quit (%v)\n", <-sig)
}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理