第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在 Go if 語(yǔ)句中混合 := 和 =

在 Go if 語(yǔ)句中混合 := 和 =

Go
江戶(hù)川亂折騰 2021-12-07 18:39:22
Go 有一個(gè)常見(jiàn)的習(xí)語(yǔ),如下所示:if val, err := func(); err != nil {    /* val and err are in scope */...}/* val and err are no longer in scope */使用“短分配”。我當(dāng)然是粉絲。感覺(jué)類(lèi)似于:/* code not involving val */{    int val;    if ((val = func()) == ERR_VALUE) {        /* Process the error */    }    /* Do something with val */}/* more code not involving val */在 C++ 中。讓我感到困惑的是,如果 if 的第一個(gè)子句中有多個(gè)變量,它們必須具有相同的作用域,即您必須執(zhí)行以下任一操作:var err errorvar val stringif val, err = func(); err != nil {...或者if val, err := func(); err != nil {...一個(gè)非常常見(jiàn)的用例似乎是您想在 if 的第一個(gè)子句中設(shè)置一個(gè)變量,測(cè)試是否有錯(cuò)誤,如果沒(méi)有,則繼續(xù)執(zhí)行程序流程的其余部分(和能夠使用您在執(zhí)行 if 時(shí)分配的任何值)。但是,在我看來(lái),如果你想這樣做,你必須:使用臨時(shí)變量,然后在 else 中分配持久變量值:var valif tempval, err := func(); err != nil {    /* Process the error */} else {    val = tempval}聲明 err 變量的范圍超過(guò) if ,如上所述。第一個(gè)選項(xiàng)看起來(lái)很笨拙——被迫使用“else”子句只是為了確保值不會(huì)超出范圍——而第二個(gè)選項(xiàng)放棄了限制變量范圍的優(yōu)勢(shì)。對(duì)于這種(看似很常見(jiàn)的)情況,更有經(jīng)驗(yàn)的 Go 程序員會(huì)使用哪些習(xí)語(yǔ)?
查看完整描述

1 回答

?
胡子哥哥

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超6個(gè)贊

Go 編程語(yǔ)言規(guī)范

如果語(yǔ)句

“If”語(yǔ)句根據(jù)布爾表達(dá)式的值指定兩個(gè)分支的條件執(zhí)行。如果表達(dá)式計(jì)算結(jié)果為真,則執(zhí)行“if”分支,否則,如果存在,則執(zhí)行“else”分支。

IfStmt = "if" [ SimpleStmt ";" ] Expression Block [ "else" ( IfStmt | Block ) ] .

.

if x > max {

  x = max

}

表達(dá)式前面可能有一個(gè)簡(jiǎn)單的語(yǔ)句,該語(yǔ)句在表達(dá)式計(jì)算之前執(zhí)行。


if x := f(); x < y {

  return x

} else if x > z {

  return z

} else {

  return y

}

如果你不能利用特殊形式,


if val, err := fnc(); err != nil {

    // ...

}

然后使用常規(guī)形式,


val, err := fnc()

if err != nil {

    // ... 

}

正則形式是 Go 語(yǔ)言必備的常用形式。為方便起見(jiàn),特殊形式是正則形式的特化;這不是必需的。如果特殊形式比普通形式更方便使用,就使用它。否則,請(qǐng)使用常規(guī)形式。


Go 是一種塊結(jié)構(gòu)的編程語(yǔ)言,其起源可以追溯到 Algol 60、C、Pascal、Modula 2 和 Oberon。

因此,你可以寫(xiě)


x := false

{

    x := true

    if x {

        fmt.Println(x)

    }

}

fmt.Println(x)

或者,等效地,為了方便,


x := false

if x := true; x {

    fmt.Println(x)

}

fmt.Println(x)

兩種情況下的輸出都是


true

false


查看完整回答
反對(duì) 回復(fù) 2021-12-07
  • 1 回答
  • 0 關(guān)注
  • 161 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)