Go有一個常見的成語,看起來像這樣:使用 「短分配」混合:=和=在Go if語句
if val, err := func(); err != nil {
/* val and err are in scope */
...
}
/* val and err are no longer in scope */
。我當然是粉絲。感覺與做類似:
/* code not involving val */
{
int val;
if ((val = func()) == ERR_VALUE) {
/* Process the error */
}
/* Do something with val */
}
/* more code not involving val */
in C++。什麼絆倒了我的是,在那裏是第一款在多個變量的情況下,如果,他們必須具有相同的範圍,即你所要做之一:
var err error
var val string
if val, err = func(); err != nil {
...
或
if val, err := func(); err != nil {
...
一個非常常見的用例似乎是你想在if的第一個子句中設置一個變量的地方,如果沒有,則繼續執行其餘的程序流程(並且能夠使用您在執行if時分配的任何值)。但是,在我看來,如果你想做到這一點,你必須要麼:
使用一個臨時變量,然後分配一個else裏面的持久變量值:
var val if tempval, err := func(); err != nil { /* Process the error */ } else { val = tempval }
如上所述,聲明err變量的範圍超過if。
第一個選項似乎笨重 - 被迫使用一個「其他」條款只是爲了確保該值不屬於超出範圍 - 和第二扔掉限制的範圍的優勢變量。 Go程序員在這種(看似非常普遍的)情況下使用哪些習語更有經驗?
您可以隨時閱讀STDLIB源... – themihai