3

这个已经在这里出现了几次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

4

2 回答 2

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
}
于 2011-06-09T05:54:22.340 回答
1

您分配了curWeight两次,但您没有在任何地方使用该值。

Go 坚持认为,如果你为变量赋值,那么你必须在程序中的某个潜在点读回该值。如果您不打算阅读它,请_改为分配给。

于 2011-06-09T05:52:15.490 回答