3 回答

TA貢獻1891條經驗 獲得超3個贊
正如其他人已經解釋的那樣,:=既用于聲明,賦值,也用于重新聲明;它會自動猜測(推斷)變量的類型。
例如,foo := 32是以下的簡寫形式:
var foo int
foo = 32
// OR:
var foo int = 32
// OR:
var foo = 32
/* 有一些規則: */
★ 第一條規則:
你不能使用:=out of funcs。這是因為,在任何 func 中,語句都應該以關鍵字開頭。
// no keywords below, illegal.
illegal := 42
// `var` keyword makes this statement legal.
var legal = 42
func foo() {
alsoLegal := 42
// reason: it's in a func scope.
}
★ 第二條規則:
您不能使用它們兩次(在同一范圍內):
legal := 42
legal := 42 // <-- error
因為,:=引入了"a new variable",因此使用它兩次不會重新聲明第二個變量,所以它是非法的。
★ 第三條規則:
您可以將它們用于多變量聲明和賦值:
foo, bar := 42, 314
jazz, bazz := 22, 7
★ 第四條規則(重新聲明):
如果變量之一是新的,您可以在“多變量”聲明中使用它們兩次:
foo, bar := someFunc()
foo, jazz := someFunc() // <-- jazz is new
baz, foo := someFunc() // <-- baz is new
這是合法的,因為您沒有聲明所有變量,您只是將新值重新分配給現有變量,并同時聲明新變量。這稱為重新聲明。
★ 第五條規則:
您可以使用短聲明在較新的范圍內聲明一個變量,即使該變量之前已經用相同的名稱聲明過:
var foo int = 34
func some() {
// because foo here is scoped to some func
foo := 42 // <-- legal
foo = 314 // <-- legal
}
在這里,foo := 42是合法的,因為它foo在some()func 的范圍內聲明。foo = 314是合法的,因為它只是為 分配了一個新值foo。
★ 第六條規則:
您可以在短語句塊中聲明相同的名稱,例如:if、for、switch:
foo := 42
if foo := someFunc(); foo == 314 {
// foo is scoped to 314 here
// ...
}
// foo is still 42 here
因為,fooin if foo := ...,只屬于那個if子句,它在不同的范圍內。
因此,作為一般規則:如果您想輕松聲明一個變量,您可以使用:=,或者,如果您只想覆蓋現有變量,您可以使用=.
- 3 回答
- 0 關注
- 281 瀏覽
添加回答
舉報