<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Go 語言基礎(chǔ) - if-else

          共 1760字,需瀏覽 4分鐘

           ·

          2022-04-14 12:21

          點擊上方“Go語言進(jìn)階學(xué)習(xí)”,進(jìn)行關(guān)注

          回復(fù)“Go語言”即可獲贈從入門到進(jìn)階共10本電子書

          更有明朝恨,離杯惜共傳。

          你好,我是四哥。

          上篇文章我們學(xué)習(xí)了包的用法,這篇文章來學(xué)習(xí) if-else 語句。

          if 是一個具有布爾條件的語句,如果該條件的計算結(jié)果為 true,將會執(zhí)行 if 后面大括號里的代碼,如果結(jié)果為 false,則會執(zhí)行 else 后大括號里的代碼。

          通過這篇文章,我們會學(xué)習(xí)了解 if 語句的各種語法和使用方法。

          if 語法

          if 語句的語法如下所示:

          if?condition?{
          }

          如果判斷 condition 為 true,則執(zhí)行大括號 {} 之間的代碼。

          與 C 等其他語言不同,大括號 {} 是強(qiáng)制性的,即使大括號之間只有一行代碼。

          示例

          讓我們編寫一個簡單的程序來判斷一個數(shù)字是偶數(shù)還是奇數(shù)。

          package?main

          import?(
          ????"fmt"
          )

          func?main()?{
          ????num?:=?10
          ????if?num%2?==?0?{?//checks?if?number?is?even
          ????????fmt.Println("The?number",?num,?"is?even")
          ????????return
          ????}
          ????fmt.Println("The?number",?num,?"is?odd")
          }

          執(zhí)行[1]

          上面代碼第 9 行 num%2 判斷 num 除以 2 余數(shù)是否為 0,因為 num 次數(shù)偶數(shù),所以余數(shù)為 0,程序輸出 The number 10 is even。

          if-else 語句

          if 語句有對應(yīng)的 else 分支,如果 condition 結(jié)果為 false,則會執(zhí)行 else 分支。

          if?condition?{
          }?else?{
          }

          在上面的代碼,如果 condition 結(jié)果為 false,則 else 分支 {} 之間的代碼行將被執(zhí)行。

          讓我們使用 if-else 語句重寫程序來判斷數(shù)字是奇數(shù)還是偶數(shù)。

          package?main

          import?(
          ????"fmt"
          )

          func?main()?{
          ????num?:=?11
          ????if?num%2?==?0?{?//checks?if?number?is?even
          ????????fmt.Println("the?number",?num,?"is?even")
          ????}?else?{
          ????????fmt.Println("the?number",?num,?"is?odd")
          ????}
          }

          執(zhí)行[2]

          上面的代碼中,我們沒有在條件為 true 時直接返回,而是創(chuàng)建了 else 語句,當(dāng)條件為 false 時,將執(zhí)行該語句。在我們這個 case 中,由于 11 是奇數(shù),因此 if 條件為 false,所以會執(zhí)行 else 語句中的代碼。

          上面代碼執(zhí)行輸出:

          the?number?11?is?odd

          if-else if-else 語句

          if 語句不僅有 else 分支,還可以有 else-if 分支,語法如下:

          if?condition1?{
          ...
          }?else?if?condition2?{
          ...
          }?else?{
          ...
          }

          代碼執(zhí)行時會從上之下判斷每個分支的 condition 是否為 true。

          上面的代碼,如果 condition1 為 true,將會執(zhí)行 condition1 后面 {} 之間的代碼;

          如果 condition1 為 false 且 condition2 為 true,則會執(zhí)行 condition2 后面 {} 之間的代碼;

          如果 condition1 和 condition2 都為 false,則會執(zhí)行 else 后面 {} 之間的代碼。

          可以有任意數(shù)量的 else-if 語句塊。

          通常,只要 if 和 else-if 語句有一個 condition 為 true,就會執(zhí)行相應(yīng)的代碼塊,如果沒有為 true 的情況則會執(zhí)行 else 分支的代碼

          我們使用 else-if 語句編寫一段程序:

          package?main

          import?(
          ????"fmt"
          )

          func?main()?{
          ????num?:=?99
          ????if?num?<=?50?{
          ????????fmt.Println(num,?"is?less?than?or?equal?to?50")
          ????}?else?if?num?>=?51?&&?num?<=?100?{
          ????????fmt.Println(num,?"is?between?51?and?100")
          ????}?else?{
          ????????fmt.Println(num,?"is?greater?than?100")
          ????}
          }

          執(zhí)行[3]

          上面的代碼,else if num >= 51 && num <= 100 條件為 true,所以執(zhí)行輸出:

          99?is?between?51?and?100

          if 包含初始化語句

          if 語句的一種變體是在判斷條件之前,可以有短變量聲明語句,語法如下:

          if?assignment-statement;?condition?{
          }

          上面的代碼片段,短變量聲明語句會優(yōu)先執(zhí)行。

          我們用上面的語法重寫代碼來判斷數(shù)字是偶數(shù)還是奇數(shù)。

          package?main

          import?(
          ????"fmt"
          )

          func?main()?{
          ????if?num?:=?10;?num?%?2?==?0?{?//checks?if?number?is?even
          ????????fmt.Println(num,"is?even")
          ????}??else?{
          ????????fmt.Println(num,"is?odd")
          ????}
          }

          執(zhí)行[4]

          上面代碼第 8 行,變量 num 在 if 語句中被初始化,

          需要注意的是,num 的作用域僅限于 if-else 語句塊內(nèi),即如果我們在 if-else 之外訪問 num,編譯器將會報錯

          當(dāng)我們僅僅想聲明一個只在 if-else 內(nèi)部使用的變量時,這種語法就可以派上用場,可確保變量的作用范圍僅在 if-else 語句內(nèi)。

          else 語句應(yīng)該在 if 語句的右大括號 } 之后的同一行開始。如果不是,會編譯報錯。

          寫一小段程序理解下:

          package?main

          import?(
          ????"fmt"
          )

          func?main()?{
          ????num?:=?10
          ????if?num?%?2?==?0?{?//checks?if?number?is?even
          ????????fmt.Println("the?number?is?even")
          ????}
          ????else?{
          ????????fmt.Println("the?number?is?odd")
          ????}
          }

          執(zhí)行[5]

          上面代碼的第 11 行,else 語句沒有緊跟著 if 語句的 } 后面 ,相反,它是另起新的一行開始。如果你執(zhí)行程序編譯器將會報錯。

          ./prog.go:12:5:?syntax?error:?unexpected?else,?expecting?}

          報錯的原因在于 Go 會自動插入分號,關(guān)于插入分號的規(guī)則可以點擊這里[6]查看更多信息。

          其中有一項規(guī)則,如果一行代碼以 } 結(jié)束,則會在 } 后面自動加上分號,所以上面代碼第 11 行,會被編譯器在 } 后面自動加上分號。

          我們的代碼就變成了:

          ...
          if?num%2?==?0?{
          ??????fmt.Println("the?number?is?even")
          };??//semicolon?inserted?by?Go?Compiler
          else?{
          ??????fmt.Println("the?number?is?odd")
          }

          由于 if-else 是一個獨立的語句,中間不應(yīng)出現(xiàn)分號,因此,程序編譯會報錯。因此,將 else 緊跟在 if 語句的右大括號 } 之后是語法要求。

          正確格式的代碼如下:

          package?main

          import?(
          ????"fmt"
          )

          func?main()?{
          ????num?:=?10
          ????if?num%2?==?0?{?//checks?if?number?is?even
          ????????fmt.Println("the?number?is?even")
          ????}?else?{
          ????????fmt.Println("the?number?is?odd")
          ????}
          }

          執(zhí)行[7]

          Go 里的習(xí)慣用法

          我們已經(jīng)學(xué)習(xí)了各種 if-else 語句,針對同一功能可以用這些不同語句編寫出不同的實現(xiàn)方法。例如,我們使用 if-else 語句及其變體實現(xiàn)了不同的方式去判斷一個數(shù)字是奇數(shù)還是偶數(shù)。你可能會問,哪種方式才是 Go 語言常用的方式呢?

          在 Go 的設(shè)計哲學(xué)中,最好避免不必要的分支和代碼縮進(jìn)。執(zhí)行時盡早返回也被認(rèn)為是更好的。

          再來展示下之前的代碼:

          package?main

          import?(
          ????"fmt"
          )

          func?main()?{
          ????if?num?:=?10;?num?%?2?==?0?{?//checks?if?number?is?even
          ????????fmt.Println(num,"is?even")
          ????}??else?{
          ????????fmt.Println(num,"is?odd")
          ????}
          }

          按照 Go 語言的設(shè)計哲學(xué)該如何編寫上述的代碼呢?應(yīng)該盡量避免 else 分支;如果 if 語句的條件為 true,則應(yīng)盡早執(zhí)行 return 返回。

          就像下面這樣:

          package?main

          import?(
          ????"fmt"
          )

          func?main()?{
          ????num?:=?10;
          ????if?num%2?==?0?{?//checks?if?number?is?even
          ????????fmt.Println(num,?"is?even")
          ????????return
          ????}
          ????fmt.Println(num,?"is?odd")

          }

          執(zhí)行[8]

          在上面代碼中,一旦我們發(fā)現(xiàn)數(shù)字是偶數(shù),就立即返回,就避免了不必要的 else 分支。這就是 Go 語言的哲學(xué) -- “大道至簡”,盡量追求代碼簡潔。

          編寫代碼時務(wù)必牢記這點!

          via: https://golangbot.com/if-statement/
          作者:Naveen R

          參考資料

          [1]

          執(zhí)行: https://play.golang.org/p/RRxkgK07ul4

          [2]

          執(zhí)行: https://play.golang.org/p/bMevwhJhguO

          [3]

          執(zhí)行: https://play.golang.org/p/VNPbCiK9eXT

          [4]

          執(zhí)行: https://play.golang.org/p/_X9q4MWr4s

          [5]

          執(zhí)行: https://play.golang.org/p/RYNqZZO2F9

          [6]

          這里: https://golang.org/ref/spec#Semicolons

          [7]

          執(zhí)行: https://play.golang.org/p/hv_27vbIBC

          [8]

          執(zhí)行: https://play.golang.org/p/N8A5tPLnVYr

          -------------------?End?-------------------

          往期精彩文章推薦:

          歡迎大家點贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          想加入Go學(xué)習(xí)群請在后臺回復(fù)【入群

          萬水千山總是情,點個【在看】行不行

          瀏覽 31
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美三级高清在线观看 | 久草手机在线视频 | 91精品内射 | 欧美成人性爱可下载视频 | 91久色|