【发布时间】:2025-12-31 11:30:10
【问题描述】:
我在 * 上的第一个问题 :D
我正在运行 go 1.16。我创建了这个函数:
func (_m *MyPool) InChannel(outs ...chan interface{}) error {
for _, out := range outs {
out = _m.inChan
}
return nil
}
MyPool 是一种工作池类型,其中包含以下成员:
type MyPool struct {
inChan chan interface{}
}
我的主要问题是,当遍历 InChannel 的可变参数输入时,Go 标记了 out 循环变量。这是为什么?我确实在使用它...
抱歉,我是 * 的菜鸟,所以我正在编辑以澄清一下。我确实想分配,而不是发送。这是因为发送者将有一个outChan chan interface{} 作为成员变量,并将通过以下方式发送值:
func (s *Sender) Out(out interface{}) {
select {
case <-s.Ctx.Done():
return
case s.outChan <- out:
return
}
}
编辑:所以我最终通过这样做来解决它:
func (m *MyPool) InChannel(outs ...*chan interface{}) error {
for _, out := range outs {
*out = m.inChan
}
return nil
}
【问题讨论】:
-
out <- _m.inChan不是您真正想要做的吗?或者_m.inChan <- out?或者您希望通过out = _m.inChan实现什么? -
另外,虽然它在任何意义上都没有错误,但接收者变量的名称
_m不是很好的 Go 风格:m会很好。跨度>
标签: go concurrency