gpt4 book ai didi

go - 将 chan slice 转换为输出 chan slice

转载 作者:行者123 更新时间:2023-12-01 22:43:36 25 4
gpt4 key购买 nike

我想从一个函数返回一个 []<-chan int 给定的 []chan int,但即使转换也不起作用。
可以将 分配给 chan Tchan<- T (隐式类型转换)。我不知道为什么你 不能 对一段 chans 做同样的事情。 AFAIK <-chan T 只是编译时的事情(就像其他语言中的 <- 一样),并且 constchan 的内存布局是相同的。
我可以提供代码的完整示例,但基本上这是我想要做的:

func f() []<-chan int {
var chanList []chan int
// setup writing to chans
return chanList
}
这会产生编译错误:不能使用 <-chan 作为 []<-chan int 。如果我使用类型转换,也会发生同样的事情。将整个 slice 复制到一个新 slice 中是可行的,但看起来很丑陋和多余(对于一个巨大的 slice 来说效率低下)。

最佳答案

在围棋中,[]<-chan int[]chan int被视为不同的事物。尽管它们可能共享完全相同的内存结构。
将您的实现包装在自定义结构中怎么样?

package main

// roCh denotes a readonly channel
type roCh chan int

// Read is an exposed method for reading this channel
func (r roCh) Read() int { return <-r }

func newChannels(n int) []roCh {
roChs := make([]roCh, n)

for i := range roChs {
roChs[i] = roCh(make(chan int, 1))

// Apply your channel logic here...
// ...
}

return roChs
}

func main() {
chs := newChannels(5)
for _ = range chs {
// channel readonly operation...
// chs[i].Read()
}
}
您可以向用户隐藏阅读 channel 的详细信息。它可以强制调用者使用 Read 方法。用于阅读这些 channel 的内容。

关于go - 将 chan slice 转换为输出 chan slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64019326/

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