当前位置: > > > > 为什么 go 编译器将我的变量标记为未使用?
来源:stackoverflow
2024-04-28 09:51:36
0浏览
收藏
今天给大家带来了《为什么 go 编译器将我的变量标记为未使用?》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~
问题内容
我在 stackoverflow 上的第一个问题: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
循环变量。这是为什么?我确实在用它…
抱歉,我是 stackoverflow 的菜鸟,所以我正在编辑以澄清一下。我确实想分配,而不是发送。这是因为发送方将有一个 outchan chan 接口{}
作为成员变量,并将通过以下方式发送值:
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
或者也许您想更改 out
代表的值? out
是一个循环变量,它是您范围内的切片元素的副本。给out
赋值只是给循环变量赋值,而不是给切片元素赋值。
一般来说,您可以通过使用 分配值来更改切片元素,如下所示:
s := []int{1, 2, 3} for i := range s { s[i] = 10 // Assign a value to the slice elements }
但是,在您的情况下,这不会有任何好处,因为您正在遍历可变参数的切片。
今天关于《为什么 go 编译器将我的变量标记为未使用?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!