golang中=和< - 之间有什么区别

Wya*_*att 4 go

func worker(id int, jobs <-chan int, results chan<- int) {
    for j := range jobs {
        fmt.Println("worker", id, "processing job", j)
        time.Sleep(time.Second)
        results <- j * 2
    }
}

func main() {
    t := time.Now()
    fmt.Println(t)
    jobs := make(chan int, 100)
    results := make(chan int, 100)
    for w := 1; w <= 4; w++ {
        go worker(w, jobs, results)
    }
    for j := 1; j <= 20; j++ {
        jobs <- j
    }
    close(jobs)
    for a := 1; a <= 20; a++ {
        <-results
    }

    t = time.Now()
    fmt.Println(t)
}
Run Code Online (Sandbox Code Playgroud)

我对"< - "感到困惑,我找不到任何关于"< - "的相关文件.那么< - 和= ??之间的区别是什么?为什么我不能使用=这里?

Ben*_*ell 6

=运算符与变量赋值交易,因为在大多数语言.它表达了想要更新标识符引用的值的想法.的<-操作者表示从信道传递的值与参考的想法.如果您将通道视为使用赋值运算符=的队列,则会将对队列的引用分配给目标变量.接收运算符<-等效于从队列中出队并将项的值分配给目标变量.

由于类型不匹配,您无法互换使用运算符.请注意Go规范的链接,这些链接对操作员来说更长.


Rob*_*Rob 5

这与Go中的频道有关。您认为它和其他语言一样与分配有关。在您的代码中,值“ j”被发送到通道“ jobs”。

https://gobyexample.com/channels


Kai*_*cui 5

  • “=”是赋值,就像其他语言一样。
  • <- 是一个操作符只与通道一起工作,这意味着从通道中放置获取消息。
  • channel是go中的一个重要概念,尤其是在并发编程中。你可以试试这个Channel TourPage 看看它的使用场景。