gpt4 book ai didi

multithreading - 如何在 Go 中使用 channel 发送方向

转载 作者:IT王子 更新时间:2023-10-29 01:11:26 26 4
gpt4 key购买 nike

在Go中,可以指定 channel 可以发送的方向。我正在尝试创建一个关于它的示例,请查看以下代码:

package main

import (
"fmt"
"time"
)

func main() {

ic_send_only := make(<-chan int) //a channel that can only send data - arrow going out is sending
ic_recv_only := make(chan<- int) //a channel that can only receive a data - arrow going in is receiving

go func() {
ic_recv_only <- 4555
}()

go func() {

ic_send_only <- ic_recv_only

}()

fmt.Println(ic_recv_only)
time.Sleep(10000)

}

编译错误

# command-line-arguments
.\send_receive.go:19: invalid operation: ic_send_only <- ic_recv_only (send to receive-only type <-chan int)
[Finished in 0.2s with exit code 2]

如何以正确的方式使用 channel 方向?

或者谁有比我更好的样本?

最佳答案

三个问题:

  • 您颠倒了发送和接收操作(这是您看到的错误)
  • 创建仅接收或仅发送 channel 毫无意义,因为您无法使用它们
  • 您使用的表示法是尝试发送 channel 本身,而不是结果。您需要接收发送,这需要两个箭头。

    ic_recv_only <- <-ic_send_only

您可能会感到困惑,因为您颠倒了术语。 <-ch是一个“接收操作”,ch <-是一个发送操作。请注意,在您的示例中,一切都会陷入僵局,因为您无法完成相应的发送和接收以通过任一 channel 传递某些内容。

这是一个完整的例子:

// This receives an int from a channel. The channel is receive-only
func consumer(ch <-chan int) int {
return <-ch
}

// This sends an int over a channel. The channel is send-only
func producer(i int, ch chan<- int) {
ch <- i
}

func main() {
ch := make(chan int)
go producer(42, ch)
result := consumer(ch)
fmt.Println("received", result)
}

关于multithreading - 如何在 Go 中使用 channel 发送方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25141337/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com