這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。這是我們 [Golang 系列教程](/subject/2)的第 8 篇。if 是條件陳述式。if 語句的文法是```goif condition { }```如果 `condition` 為真,則執行 `{` 和 `}` 之間的代碼。不同於其他語言,例如 C 語言,Go 語言裡的 `{ }` 是必要的,即使在 `{ }` 之間只有一條語句。if 語句還有可選的 `else if` 和 `else` 部分。```goif condition { } else if condition {} else {}```if-else 語句之間可以有任意數量的 `else if`。條件判斷順序是從上到下。如果 `if` 或 `else if` 條件判斷的結果為真,則執行相應的代碼塊。 如果沒有條件為真,則 `else` 代碼塊被執行。讓我們編寫一個簡單的程式來檢測一個數字是奇數還是偶數。```gopackage mainimport ( "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") }}```[線上運行程式](https://play.golang.org/p/vWfN8UqZUr)`if num%2 == 0` 語句檢測 num 取 2 的餘數是否為零。 如果是為零則列印輸出 "the number is even",如果不為零則列印輸出 "the number is odd"。在上面的這個程式中,列印輸出的是 `the number is even`。`if` 還有另外一種形式,它包含一個 `statement` 可選語句部分,該組件在條件判斷之前運行。它的文法是```goif statement; condition { }```讓我們重寫程式,使用上面的文法來尋找數字是偶數還是奇數。```gopackage mainimport ( "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") }}```[線上運行程式](https://play.golang.org/p/_X9q4MWr4s)在上面的程式中,`num` 在 `if` 語句中進行初始化,`num` 只能從 `if` 和 `else` 中訪問。也就是說 `num` 的範圍僅限於 `if` `else` 代碼塊。如果我們試圖從其他外部的 `if` 或者 `else` 訪問 `num`,編譯器會不通過。讓我們再寫一個使用 `else if` 的程式。```gopackage mainimport ( "fmt")func main() { num := 99 if num <= 50 { fmt.Println("number is less than or equal to 50") } else if num >= 51 && num <= 100 { fmt.Println("number is between 51 and 100") } else { fmt.Println("number is greater than 100") }}```[線上運行程式](https://play.golang.org/p/Eji7vmb17Q)在上面的程式中,如果 `else if num >= 51 && num <= 100` 為真,程式將輸出 `number is between 51 and 100`。[擷取免費的 Golang 工具](https://app.mailerlite.com/webforms/popup/p8t5t8)### 一個注意點`else` 語句應該在 `if` 語句的大括弧 `}` 之後的同一行中。如果不是,編譯器會不通過。讓我們通過以下程式來理解它。```gopackage mainimport ( "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") }}```[線上運行程式](https://play.golang.org/p/RYNqZZO2F9)在上面的程式中,`else` 語句不是從 `if` 語句結束後的 `}` 同一行開始。而是從下一行開始。這是不允許的。如果運行這個程式,編譯器會輸出錯誤,```main.go:12:5: syntax error: unexpected else, expecting }```出錯的原因是 Go 語言的分號是自動插入。你可以在這裡閱讀分號插入規則 [https://golang.org/ref/spec#Semicolons](https://golang.org/ref/spec#Semicolons)。在 Go 語言規則中,它指定在 `}` 之後插入一個分號,如果這是該行的最終標記。因此,在if語句後面的 `}` 會自動插入一個分號。實際上我們的程式變成了```goif num%2 == 0 { fmt.Println("the number is even") }; //semicolon inserted by Goelse { fmt.Println("the number is odd")}```分號插入之後。從上面程式碼片段可以看出第三行插入了分號。由於 `if{…} else {…}` 是一個單獨的語句,它的中間不應該出現分號。因此,需要將 `else` 語句放置在 `}` 之後處於同一行中。我已經重寫了程式,將 else 語句移動到 if 語句結束後 `}` 的後面,以防止分號的自動插入。```gopackage mainimport ( "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") }}```[線上運行程式](https://play.golang.org/p/hv_27vbIBC)現在編譯器會很開心,我們也一樣 ?。本章教程到此告一段落了,感謝您的閱讀,歡迎您的任何評論和反饋。**上一教程 - [包 (Packages)](https://studygolang.com/articles/11893)****下一教程 - [迴圈](https://studygolang.com/articles/11924)**
via: https://golangbot.com/if-statement/
作者:Nick Coghlan 譯者:Dingo1991 校對:rxcai
本文由 GCTT 原創編譯,Go語言中文網 榮譽推出
本文由 GCTT 原創翻譯,Go語言中文網 首發。也想加入譯者行列,為開源做一些自己的貢獻嗎?歡迎加入 GCTT!
翻譯工作和譯文發表僅用於學習和交流目的,翻譯工作遵照 CC-BY-NC-SA 協議規定,如果我們的工作有侵犯到您的權益,請及時聯絡我們。
歡迎遵照 CC-BY-NC-SA 協議規定 轉載,敬請在本文中標註並保留原文/譯文連結和作者/譯者等資訊。
文章僅代表作者的知識和看法,如有不同觀點,請樓下排隊吐槽
2728 次點擊 ∙ 1 贊