声明的变量,不在for循环中使用

时间:2011-06-09 03:27:45

标签: for-loop go declare

这个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

2 个答案:

答案 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两次,但您不是使用这两个地方的值。

坚持认为,如果为变量赋值,则必须在程序的某个潜在点读回该值。如果您不打算阅读,请改为分配到_