为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 go 编译器将我的变量标记为未使用?

为什么 go 编译器将我的变量标记为未使用?

Go
慕容3067478 2022-08-24 16:55:50
我关于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{}}我的主要问题是 Go 在 Variadic 输入的范围内标记循环变量。为什么?我确实在使用它...outInChannel对不起,我是StackOverflow的菜鸟,所以我正在编辑以澄清一下。我确实想分配,而不是发送。这是因为发送方将具有 as 成员变量,并将通过以下方式发送值: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}
查看完整描述

1 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

你没有“真正”使用它。你给一个你不读的变量赋值了一些东西,所以赋值没有效果,所以基本上你没有使用这个变量。


请注意,这是分配。如果要在频道上发送内容,请使用 send 语句:=


out <- _m.inChan

或者,也许您想更改值表示? 是一个循环变量,它是您在其上范围的切片元素的副本。将值赋给 仅将值赋给循环变量,而不赋值给切片元素。outoutout


通常,您可以通过使用索引表达式分配值来更改切片元素,如下所示:


s := []int{1, 2, 3}

for i := range s {

    s[i] = 10 // Assign a value to the slice elements

}

然而,在你的情况下,这没有任何好处,因为你的范围超过了可变参数的切片。


查看完整回答
反对 回复 2022-08-24
  • 1 回答
  • 0 关注
  • 110 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信