2011-06-09 131 views
3

此处已在Go中出现过几次,但我认为我的经验是独一无二的。这是我的代码。声明变量并且未在for循环中使用

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

回答

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 
} 
+4

同样,for语句可以是'for i:= range stack {...} – 2011-06-10 04:27:44

0

您分配给curWeight两次,但您不是使用在任一位置的值。

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