gpt4 book ai didi

go - 当非默认是输入 channel 时,为什么 select in go 总是进入默认情况?

转载 作者:数据小太阳 更新时间:2023-10-29 03:42:59 27 4
gpt4 key购买 nike

我是编程新手。这是我的一段代码。我正在尝试为结构分配值并将该结构分配给 channel 。但它没有设置它并进入默认情况。

package main
import (
"fmt"
)
type object struct {
a int
b string
}
func main() {

o1 := object{
a: 25,
b: "quack",
}

var oc chan object
select {
case oc <- o1:
fmt.Println("Chan is set")
default:
fmt.Println("Chan is not set")
}
}

最佳答案

您从未初始化 oc channel ,所以它是 nil,并且在 nil channel 上发送会永远阻塞。如果没有就绪的案例,select 语句会选择 default

您必须初始化 channel 。如果没有接收器,它必须有“一些”缓冲区来容纳您要在其上发送的元素,否则发送也会阻塞。

这按您希望的方式工作(在 Go Playground 上尝试):

var oc chan object
oc = make(chan object, 1)

参见相关:How does a non initialized channel behave?

关于go - 当非默认是输入 channel 时,为什么 select in go 总是进入默认情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57653111/

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