2011-06-09 175 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堅持認爲,如果您爲變量賦值,那麼您必須在程序中的某個潛在點處讀取該值。如果您不打算閱讀它,請改用_