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

Eli*_*Eli 3 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
}
Run Code Online (Sandbox Code Playgroud)

为什么gc告诉我我没用curWeight

tux*_*21b 5

请注意,范围construct(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
}
Run Code Online (Sandbox Code Playgroud)

  • 类似地,for语句可以是`for i:= range stack {...}` (4认同)