1 回答

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊
所以基本上這里發(fā)生的是一個(gè)variable shadowing
.
Go 具有變量范圍,您可以通過在函數(shù)外部定義變量來在全局范圍內(nèi)擁有一個(gè)變量。然后你就可以在同一個(gè)包中的任何地方使用這個(gè)變量(或者如果它被導(dǎo)出到你的代碼中的任何地方)。
然后你有在代碼塊中定義的變量。類似于var conn *kafka.Conn
您可以從定義該變量的塊(以及所有子塊)中的任何地方訪問該變量。
將塊視為用大括號(hào)括起來的代碼{}
這意味著塊if/else
下是單獨(dú)的塊func
。
=
現(xiàn)在你需要了解的是和之間的區(qū)別:=
=
用于為變量賦值,而:=
是用于聲明和賦值變量的簡(jiǎn)寫形式。
因此,通過使用conn, err := d.Dial("tcp", kafkabroker)
代碼,您實(shí)際上要做的是在if
塊中聲明新變量,并根據(jù) func cal 的返回值將值分配給它們d.Dial
。
在某些情況下,您可能想要這樣做。最常見的情況是當(dāng)您有一個(gè) for 循環(huán)啟動(dòng)使用來自外部塊的變量的 goroutines 時(shí)。
- 1 回答
- 0 關(guān)注
- 74 瀏覽
添加回答
舉報(bào)