gpt4 book ai didi

go - "make"单向 channel 是否有目的?

转载 作者:IT老高 更新时间:2023-10-28 13:06:37 28 4
gpt4 key购买 nike

注意:这不是 this 的副本问题,因为我了解您何时会使用单向 channel 。我一直这样做。我的问题是为什么这个程序是有效的:

func main() {
ch := make(chan<- int)
ch <- 5
fmt.Println("Hello, playground")
}

Playground

当然,运行它会导致死锁。如果您使用 %T 检查类型,Go 实际上会报告 ch 的类型是仅发送 channel 。在 Go 中,您可以 make 单向 channel ,但这没有什么意义,因为通过创建一个在开始时只是单向的 channel ,您可以确保至少有一个 read/write 永远不会发生。

一种可能的解释是强制 goroutine 挂起,但这与 select {} 一样容易完成。

我唯一的另一个想法是强制 goroutine 只执行 n 次,

ch := make(chan<- int, 50)
// do something 50 times, since then the buffer is full
for {
ch <- doSomething()
}

但这更容易,更不用说不那么容易混淆了,用任意数量的不同结构来完成。

这只是类型系统的怪癖/疏忽,还是我没有想到的这种行为有用?

最佳答案

你有一种语言:单词(标记)和语法。您总是可以写出有效的废话:蓝色不是颜色。

你写了一些有效的废话:

package main

func main() {
ch := make(chan<- int)
ch <- 5
}

这里有一些更有效的废话:

package main

func main() {
for {
}
}

关于go - "make"单向 channel 是否有目的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31239758/

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