这个Go
来了几次,但我认为我的经历是独一无二的。这是我的代码。
type Stack []Weight
func newStack( size int, startSpread Spread ) Stack {
stack := make(Stack, size)
for _, curWeight := range stack {
curWeight = Weight{ startSpread, rand.Float64( ), rand.Float64( ) }
}
return stack
}
为什么gc
告诉我我没有使用curWeight
?
答案 0 :(得分:5)
请注意,范围构造(for _, curWeight := range stack
)会一个接一个地复制元素。因此,您只是复制一个值,然后您不会将该副本用于任何进一步的计算,打印或返回。你只需再次删除副本。
所以我猜你最初的想法是将重量添加到堆栈并返回它。我们这样做:
func newStack(size int, startSpread Spread) Stack {
stack := make(Stack, size)
for i := 0; i < size; i++ {
stack[i] = Weight{startSpread, rand.Float64(), rand.Float64()}
}
return stack
}
答案 1 :(得分:0)
您要分配给curWeight
两次,但您不是使用这两个地方的值。
坚持认为,如果为变量赋值,则必须在程序的某个潜在点读回该值。如果您不打算阅读,请改为分配到_
。