此函数参数中包含通道运算符的代码:
func Worker(item <- chan string)
这段代码没有函数参数中的通道运算符:
func Worker(item chan string)
答案 0 :(得分:5)
可选&lt; - 运算符指定通道方向,发送或 接收。如果没有给出方向,则通道是双向的。一个 通道可能仅限于发送或仅接收 转换或转让。
来自golang spec:https://golang.org/ref/spec#Channel_types
答案 1 :(得分:1)
func Worker(item&lt; - chan string)
此处item
是发送频道。您只能向其发送无法接收的价值。
func Worker(item chan string)
此处item
是双向渠道。发送和接收都是可能的。
答案 2 :(得分:0)
您可以尝试使用此代码示例来模拟通道方向。
// func Worker(item <- chan string) # Send or Receive
// func Worker(item chan string) # Bidirectional
func sendOrRecvFunc(item <-chan string, msg *string) {
*msg = <- item // send
}
func bidirectionalFunc(item chan string, msg string) {
item <- msg // receive
}
func main() {
// e.g Send or Receive
var msg1 string
item1 := make(chan string,1)
item1 <- "message1" // receive
sendOrRecvFunc(item1,&msg1)
fmt.Println(msg1)
//---------------------------------------------
// e.g Bidirectional
item2 := make(chan string,1)
bidirectionalFunc(item2,"message2")
msg2 := <- item2 // send
fmt.Println(msg2)
}
// Output:
message1
message2