go - 为什么 go 编译器将我的变量标记为未使用?
问题描述
我在 StackOverflow 上的第一个问题:D
我正在运行 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{}
}
我的主要问题是 Goout
在InChannel
. 这是为什么?我确实在用...
抱歉,我是 StackOverflow 的菜鸟,所以我正在编辑以澄清一下。我确实想分配,而不是发送。这是因为发送者将有一个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
}
解决方案
你不是“真正”使用它。您将某些内容分配给您未读取的变量,因此分配无效,因此基本上您没有使用该变量。
请注意,这=
是assignment。如果您想在频道上发送内容,请使用send语句:
out <- _m.inChan
或者,也许您想更改值out
表示?out
是一个循环变量,它是您所覆盖的切片元素的副本。给 to 赋值out
只会给循环变量赋值,而不是给切片元素赋值。
通常,您可以通过使用如下索引表达式分配值来更改切片元素:
s := []int{1, 2, 3}
for i := range s {
s[i] = 10 // Assign a value to the slice elements
}
但是,在您的情况下,这不会有任何好处,因为您的范围是可变参数的切片。
推荐阅读
- javascript - frappe 甘特图错误(小时模式):错误:
属性 x:预期长度,“NaN” - amazon-s3 - 我在使用带有 java 应用程序的 AWS Java SDK 时遇到运行时错误
- terraform - Terraform 计划错误 - 缺少预期 {
- string - 如何简化翻译超过 5000 个字符的代码
- xamarin - Xamarin.Forms ShouldOverrideUrlLoading 触发器
- android - android Studio 找不到库 com.objsys.asn1j.runtime:asn1rt:1.0.3
- php - 如何在 PHP 中查看错误的全文
- keras - 重塑输入到 Keras 的第一层
- java - 在 Java 中使用非常长的字符串(斐波那契问题)
- javascript - 刷新页面时,Twilio 聊天不起作用