2 回答

TA貢獻1982條經(jīng)驗 獲得超2個贊
根據(jù)Go 語言規(guī)范:如果您選擇以下形式的語句ForClause:
ForClause = [ InitStmt ] ";" [ Condition ] ";" [ PostStmt ] .
的定義InitStmt:
SimpleStmt = EmptyStmt | ExpressionStmt | SendStmt | IncDecStmt | Assignment
| ShortVarDecl .
所以你可以看到如果你想在for語句中創(chuàng)建一個新變量,它只能是一個短變量聲明,像這樣:
for i := 0; i < 10; i++ {}
Short 變量聲明可用于聲明任何類型的新變量,變量的類型為右側(cè)對應(yīng)的初始化值的類型。
讓我們仔細(xì)檢查一下:
i := 0
右側(cè)有0:它是一個無類型的數(shù)字常量。請注意,Go 中的無類型常量具有默認(rèn)類型,如果需要類型,則使用該類型,就像這種情況。因此,無類型整數(shù)常量的默認(rèn)類型是int變量i將具有int類型。
如果您希望它具有 type int64,請使用具有int64type的表達(dá)式,如下所示:
for i := int64(0); i < 10; i++ {} // Explicit type conversion
const ZERO int64 = 0
for i := ZERO; i < 10; i++ {} // Typed constant
var vzero int64
for i: = vzero; i < 10; i++ {} // Expression of type int64
或者i在for使用var聲明的語句之前創(chuàng)建變量:
var i int64
for i = 0; i < 10; i++ {} // Variable is declared before for using "var"
請注意,最后一個示例不使用短變量聲明,只是一個簡單的賦值。
添加回答
舉報