3 回答

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超8個(gè)贊
在 Go 中,:=
用于聲明 + 賦值,而=
僅用于賦值。
例如,var foo int = 10
與 相同foo := 10
。

TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個(gè)贊
正如其他人已經(jīng)解釋的那樣,:=既用于聲明,賦值,也用于重新聲明;它會(huì)自動(dòng)猜測(cè)(推斷)變量的類型。
例如,foo := 32是以下的簡(jiǎn)寫形式:
var foo int
foo = 32
// OR:
var foo int = 32
// OR:
var foo = 32
/* 有一些規(guī)則: */
★ 第一條規(guī)則:
你不能使用:=out of funcs。這是因?yàn)?,在任?func 中,語(yǔ)句都應(yīng)該以關(guān)鍵字開頭。
// 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.
}
★ 第二條規(guī)則:
您不能使用它們兩次(在同一范圍內(nèi)):
legal := 42
legal := 42 // <-- error
因?yàn)椋?=引入了"a new variable",因此使用它兩次不會(huì)重新聲明第二個(gè)變量,所以它是非法的。
★ 第三條規(guī)則:
您可以將它們用于多變量聲明和賦值:
foo, bar := 42, 314
jazz, bazz := 22, 7
★ 第四條規(guī)則(重新聲明):
如果變量之一是新的,您可以在“多變量”聲明中使用它們兩次:
foo, bar := someFunc()
foo, jazz := someFunc() // <-- jazz is new
baz, foo := someFunc() // <-- baz is new
這是合法的,因?yàn)槟鷽](méi)有聲明所有變量,您只是將新值重新分配給現(xiàn)有變量,并同時(shí)聲明新變量。這稱為重新聲明。
★ 第五條規(guī)則:
您可以使用短聲明在較新的范圍內(nèi)聲明一個(gè)變量,即使該變量之前已經(jīng)用相同的名稱聲明過(guò):
var foo int = 34
func some() {
// because foo here is scoped to some func
foo := 42 // <-- legal
foo = 314 // <-- legal
}
在這里,foo := 42是合法的,因?yàn)樗黤oo在some()func 的范圍內(nèi)聲明。foo = 314是合法的,因?yàn)樗皇菫?分配了一個(gè)新值foo。
★ 第六條規(guī)則:
您可以在短語(yǔ)句塊中聲明相同的名稱,例如:if、for、switch:
foo := 42
if foo := someFunc(); foo == 314 {
// foo is scoped to 314 here
// ...
}
// foo is still 42 here
因?yàn)?,fooin if foo := ...,只屬于那個(gè)if子句,它在不同的范圍內(nèi)。
因此,作為一般規(guī)則:如果您想輕松聲明一個(gè)變量,您可以使用:=,或者,如果您只想覆蓋現(xiàn)有變量,您可以使用=.
- 3 回答
- 0 關(guān)注
- 264 瀏覽
添加回答
舉報(bào)