For loop 已声明且未在for循环中使用的变量

For loop 已声明且未在for循环中使用的变量,for-loop,go,declare,For Loop,Go,Declare,这篇文章在《围棋》中出现过几次,但我认为我的经历是独一无二的。这是我的密码 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( ) }

这篇文章在《围棋》中出现过几次,但我认为我的经历是独一无二的。这是我的密码

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

您分配给
curWeight
两次,但您没有在任何地方使用


Go坚持认为,如果给变量赋值,那么必须在程序中的某个潜在点读回该值。如果您不打算阅读它,则将其指定给

请注意,范围构造(
for.\uu,curWeight:=范围堆栈
)会一个接一个地复制元素。因此,您只需复制一个值,然后就不会将该副本用于任何进一步的计算、打印或返回。你只要再把副本放下

所以我猜你最初的想法是把重量加到堆栈中,然后返回。让我们这样做:

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
}
func newStack(size int,startSpread Spread)堆栈{
堆栈:=制造(堆栈,大小)
对于i:=0;i
类似地,for语句可以是i:=范围堆栈{…}