Go 語言if else 條件語句使用教程(流程控制)
大家好~上一篇博客我們掌握了 Go 語言的運(yùn)算符與控制臺輸入輸出,能實(shí)現(xiàn)簡單的計(jì)算和交互。本篇我們正式進(jìn)入流程控制的學(xué)習(xí)——if else 條件語句,它是程序“做判斷、分分支”的核心,也是后續(xù)學(xué)習(xí)循環(huán)、函數(shù)的基礎(chǔ)。
和之前一樣,所有知識點(diǎn)都搭配可直接復(fù)制運(yùn)行的代碼示例,零基礎(chǔ)也能輕松上手,學(xué)完就能寫出有判斷邏輯的 Go 程序,徹底告別“順序執(zhí)行”的單一模式!
一、前置準(zhǔn)備
繼續(xù)使用我們的 GoStudy 項(xiàng)目,新建文件夾 ifelse,創(chuàng)建 main\.go 文件,所有測試代碼均在此文件中編寫運(yùn)行。
基礎(chǔ)代碼結(jié)構(gòu)(復(fù)制即可):
package main
import "fmt"
func main() {
// 所有if else測試代碼寫在這里
}核心說明:流程控制的作用是“讓程序根據(jù)條件執(zhí)行不同的代碼”,就像生活中“如果下雨就帶傘,否則就不帶”,if else 就是實(shí)現(xiàn)這種邏輯的關(guān)鍵語法。
二、if else 核心語法(3種常用場景)
Go 語言的 if else 語法簡潔、嚴(yán)謹(jǐn),有明確的語法規(guī)范,主要分為「單分支」「雙分支」「多分支」三種場景,我們逐一講解,重點(diǎn)注意語法細(xì)節(jié)(新手易踩坑)。
1. 單分支:if 語句(滿足條件才執(zhí)行)
最基礎(chǔ)的判斷:如果某個條件為真,就執(zhí)行一段代碼;條件為假,就跳過這段代碼。
語法格式(必須嚴(yán)格遵循):
if 條件表達(dá)式 {
// 條件為 true 時,執(zhí)行的代碼
}
關(guān)鍵注意點(diǎn)(必看):
- 條件表達(dá)式的結(jié)果必須是
bool類型(true/false),常用關(guān)系運(yùn)算符(==、\!=、\>、\<)或邏輯運(yùn)算符(\&\&、\|\|、\!)組合。 - 關(guān)鍵字
if后面的左大括號\{,必須和 if 及條件表達(dá)式在同一行,否則會編譯報錯(Go 編譯器強(qiáng)制規(guī)定)[superscript:3]。 - 即使大括號內(nèi)只有一行代碼,大括號也不能省略(遵循 Go 代碼規(guī)范,避免邏輯混亂)[superscript:5]。
- 條件表達(dá)式兩側(cè)的括號可以省略,復(fù)雜條件時加括號能提升可讀性。
示例代碼(判斷年齡是否成年):
package main
import "fmt"
func main() {
// 定義年齡變量
age := 19
// 單分支判斷:如果年齡大于等于18,打印成年
if age >= 18 {
fmt.Println("你已成年,具備獨(dú)立民事行為能力")
}
// 條件為假時,跳過上面的代碼,執(zhí)行下面的語句
fmt.Println("程序執(zhí)行完畢")
}運(yùn)行結(jié)果:
你已成年,具備獨(dú)立民事行為能力
程序執(zhí)行完畢
補(bǔ)充:如果將 age 改為 17,運(yùn)行結(jié)果只會打印“程序執(zhí)行完畢”,因?yàn)?age \>= 18 為 false,跳過了 if 內(nèi)部的代碼。
2. 雙分支:if else 語句(二選一)
場景:如果條件為真,執(zhí)行一段代碼;如果條件為假,執(zhí)行另一段代碼,兩個分支必執(zhí)行一個,互不沖突。
語法格式:
if 條件表達(dá)式 {
// 條件為 true 時,執(zhí)行的代碼
} else {
// 條件為 false 時,執(zhí)行的代碼
}關(guān)鍵注意點(diǎn)(必看):
- 關(guān)鍵字
else必須緊跟 if 分支的右大括號\},且在同一行,否則編譯報錯(Go 語法強(qiáng)制要求)[superscript:7]。 else后面的左大括號\{,必須和else在同一行,不能換行。- if 和 else 內(nèi)部的代碼塊,只會執(zhí)行其中一個,不會同時執(zhí)行。
示例代碼(判斷成績是否及格):
package main
import "fmt"
func main() {
// 定義成績變量(結(jié)合上一篇的輸入知識,接收用戶輸入)
var score int
fmt.Print("請輸入你的考試成績:")
fmt.Scan(&score)
// 雙分支判斷:及格與否
if score >= 60 {
fmt.Printf("你的成績是 %d 分,及格啦!??\n", score)
} else {
fmt.Printf("你的成績是 %d 分,未及格,需要補(bǔ)考哦~\n", score)
}
}運(yùn)行結(jié)果(兩種情況):
請輸入你的考試成績:85
你的成績是 85 分,及格啦!??
請輸入你的考試成績:58
你的成績是 58 分,未及格,需要補(bǔ)考哦~
3. 多分支:if else if else 語句(多選一)
場景:有多個條件需要判斷,依次檢查每個條件,滿足哪個條件就執(zhí)行對應(yīng)的代碼;所有條件都不滿足,執(zhí)行最后的 else 代碼(else 可選)。
適合需要分等級、分場景的判斷(如成績分級、年齡分段)。
語法格式:
if 條件1 {
// 條件1為 true 時,執(zhí)行的代碼
} else if 條件2 {
// 條件1為 false、條件2為 true 時,執(zhí)行的代碼
} else if 條件3 {
// 條件1、2為 false、條件3為 true 時,執(zhí)行的代碼
} else {
// 所有條件都為 false 時,執(zhí)行的代碼(可選)
}關(guān)鍵注意點(diǎn)(必看):
else if可以有多個(根據(jù)需求添加),但建議不超過3個,否則會影響代碼可讀性(復(fù)雜場景可后續(xù)學(xué)習(xí) switch 語句)。else if必須緊跟前一個分支的右大括號\},且在同一行,左大括號\{必須和else if在同一行[superscript:5]。- 多個條件是“互斥”的,只要有一個條件滿足,就會執(zhí)行對應(yīng)的代碼,后續(xù)的條件不會再判斷。
- 最后的
else是可選的,如果所有條件都不滿足,且沒有 else,程序會跳過整個多分支結(jié)構(gòu),繼續(xù)執(zhí)行后續(xù)代碼。
示例代碼(成績分級):
package main
import "fmt"
func main() {
var score int
fmt.Print("請輸入你的成績:")
fmt.Scan(&score)
// 多分支判斷成績等級
if score >= 90 {
fmt.Printf("成績 %d 分,等級:優(yōu)秀??\n", score)
} else if score >= 80 {
fmt.Printf("成績 %d 分,等級:良好??\n", score)
} else if score >= 60 {
fmt.Printf("成績 %d 分,等級:及格?\n", score)
} else {
fmt.Printf("成績 %d 分,等級:不及格?\n", score)
}
fmt.Println("成績分級完成!")
}運(yùn)行結(jié)果(四種情況):
請輸入你的成績:95
成績 95 分,等級:優(yōu)秀??
成績分級完成!請輸入你的成績:88
成績 88 分,等級:良好??
成績分級完成!請輸入你的成績:65
成績 65 分,等級:及格?
成績分級完成!請輸入你的成績:59
成績 59 分,等級:不及格?
成績分級完成!
小貼士:多分支的條件順序很重要!比如“score >= 60”不能放在“score >= 80”前面,否則 80 分以上的成績也會被判斷為“及格”,因?yàn)闂l件判斷會“自上而下”執(zhí)行,滿足第一個條件就會終止后續(xù)判斷。
三、Go 特色:if 語句的初始化表達(dá)式(高頻用法)
Go 語言的 if 語句有一個非常實(shí)用的特性:可以在 if 條件前添加一個初始化語句,用于定義變量,變量的作用域僅限于整個 if else 結(jié)構(gòu)內(nèi)部(外部無法訪問),能簡化代碼、避免變量污染。
語法格式:
if 變量初始化; 條件表達(dá)式 {
// 變量可在此處使用
} else if ... {
// 變量也可在此處使用
} else {
// 變量也可在此處使用
}關(guān)鍵說明:
- 初始化語句和條件表達(dá)式之間用
;分隔。 - 初始化的變量,僅在當(dāng)前 if else 所有分支中有效,出了 if else 結(jié)構(gòu)就無法訪問(避免變量沖突)[superscript:6]。
- 這種寫法在 Go 中非常常見,尤其適合結(jié)合輸入、錯誤處理等場景。
示例代碼(簡化輸入判斷):
package main
import "fmt"
func main() {
// 簡化寫法:在if中初始化變量score,同時判斷條件
if score := 85; score >= 90 {
fmt.Println("優(yōu)秀")
} else if score >= 80 {
fmt.Println("良好")
} else {
fmt.Println("及格或不及格")
}
// 錯誤示例:score 僅在上面的if else中有效,此處無法訪問
// fmt.Println(score) // 編譯報錯:undefined: score
}補(bǔ)充示例(結(jié)合輸入):
package main
import "fmt"
func main() {
// 一次性完成:初始化變量、接收輸入、判斷條件
if var age int; fmt.Print("請輸入年齡:"); fmt.Scan(&age) {
if age >= 18 {
fmt.Println("成年")
} else {
fmt.Println("未成年")
}
}
}四、嵌套 if else(進(jìn)階用法)
場景:在一個 if 或 else 分支內(nèi)部,再嵌套另一個完整的 if else 結(jié)構(gòu),用于處理“多層判斷”的場景(如“先判斷是否成年,成年后再判斷是否有駕照”)。
語法格式(簡化):
if 條件1 {
// 條件1為true,執(zhí)行此處
if 條件2 {
// 條件1和條件2都為true,執(zhí)行此處
} else {
// 條件1為true、條件2為false,執(zhí)行此處
}
} else {
// 條件1為false,執(zhí)行此處
}
關(guān)鍵注意點(diǎn)(必看):
- 嵌套層級建議不超過 3 層,否則代碼會變得混亂、難以維護(hù)(可讀性變差)。
- 嵌套的 if else 也要嚴(yán)格遵循語法規(guī)范(大括號位置、條件類型等)。
- 可以通過縮進(jìn)區(qū)分不同層級的分支(Go 建議縮進(jìn) 4 個空格或 1 個 Tab),提升可讀性。
示例代碼(多層判斷:是否能開車):
package main
import "fmt"
func main() {
var age int
var hasLicense bool // 布爾值:true=有駕照,false=無駕照
fmt.Print("請輸入你的年齡:")
fmt.Scan(&age)
fmt.Print("你是否有駕照(true=有,false=無):")
fmt.Scan(&hasLicense)
// 第一層判斷:是否成年
if age >= 18 {
fmt.Println("你已成年,符合開車的年齡要求")
// 第二層判斷:是否有駕照
if hasLicense {
fmt.Println("恭喜你,可合法開車!")
} else {
fmt.Println("你沒有駕照,不可開車,需先考駕照~")
}
} else {
fmt.Println("你未成年,不可開車!")
}
}運(yùn)行結(jié)果(三種情況):
// 情況1:成年+有駕照
請輸入你的年齡:22
你是否有駕照(true=有,false=無):true
你已成年,符合開車的年齡要求
恭喜你,可合法開車!// 情況2:成年+無駕照
請輸入你的年齡:20
你是否有駕照(true=有,false=無):false
你已成年,符合開車的年齡要求
你沒有駕照,不可開車,需先考駕照~// 情況3:未成年
請輸入你的年齡:16
你是否有駕照(true=有,false=無):true
你未成年,不可開車!
五、綜合實(shí)戰(zhàn)案例(結(jié)合之前知識點(diǎn))
結(jié)合「控制臺輸入」「運(yùn)算符」「if else」,實(shí)現(xiàn)一個“學(xué)生成績評級+獎學(xué)金判斷”的完整程序,鞏固本篇所有知識點(diǎn)。
需求:
- 接收用戶輸入的語文、數(shù)學(xué)、英語三科成績;
- 計(jì)算三科平均分;
- 根據(jù)平均分分級(優(yōu)秀≥90、良好80-89、及格60-79、不及格<60);
- 額外判斷:優(yōu)秀且平均分≥95,發(fā)放一等獎學(xué)金;良好且平均分≥85,發(fā)放二等獎學(xué)金;其他情況無獎學(xué)金。
完整代碼:
package main
import "fmt"
func main() {
// 1. 接收用戶輸入三科成績
var chinese, math, english int
fmt.Print("請輸入語文、數(shù)學(xué)、英語三科成績(空格分隔):")
fmt.Scan(&chinese, &math, &english)
// 2. 計(jì)算平均分(浮點(diǎn)型,避免整數(shù)取整誤差)
average := (chinese + math + english) / 3.0
// 3. 輸出成績信息
fmt.Printf("語文:%d 分,數(shù)學(xué):%d 分,英語:%d 分\n", chinese, math, english)
fmt.Printf("三科平均分:%.1f 分\n", average)
// 4. 多分支判斷成績等級
var level string
if average >= 90 {
level = "優(yōu)秀"
} else if average >= 80 {
level = "良好"
} else if average >= 60 {
level = "及格"
} else {
level = "不及格"
}
fmt.Printf("成績等級:%s\n", level)
// 5. 嵌套判斷獎學(xué)金(只有優(yōu)秀、良好才有機(jī)會)
if average >= 80 {
if average >= 95 {
fmt.Println("恭喜你,獲得一等獎學(xué)金!??")
} else if average >= 85 {
fmt.Println("恭喜你,獲得二等獎學(xué)金!??")
} else {
fmt.Println("無獎學(xué)金,繼續(xù)努力哦~")
}
} else {
fmt.Println("無獎學(xué)金,繼續(xù)努力哦~")
}
}運(yùn)行結(jié)果示例:
請輸入語文、數(shù)學(xué)、英語三科成績(空格分隔):96 98 94
語文:96 分,數(shù)學(xué):98 分,英語:94 分
三科平均分:96.0 分
成績等級:優(yōu)秀
恭喜你,獲得一等獎學(xué)金!??
六、新手常見錯誤(避坑指南)
- 大括號位置錯誤:if、else、else if 后面的大括號沒有和關(guān)鍵字在同一行(如 if 條件后換行寫 {),導(dǎo)致編譯報錯[superscript:7]。
- 錯誤示例:
if age \>= 18 \{ // 錯誤:\{ 不能換行 fmt\.Println\(\&\#34;成年\&\#34;\) \}- 條件表達(dá)式不是 bool 類型:比如寫
if age(age 是 int 類型),報錯“non-bool age (type int) used as if condition”,必須寫if age \>= 18這類bool結(jié)果的表達(dá)式。 - 多分支條件順序錯誤:把范圍小的條件放在后面,導(dǎo)致條件無法觸發(fā)(如先判斷 score >=60,再判斷 score >=80)。
- 嵌套層級過多:超過3層嵌套,代碼可讀性變差,容易出錯(可嘗試拆分邏輯)。
- 重復(fù)使用 if 代替 else if:比如多個獨(dú)立的 if 語句,導(dǎo)致多個條件同時執(zhí)行(需求是多選一時,必須用 else if)。
- if 初始化變量的作用域錯誤:試圖在 if else 外部訪問初始化的變量,導(dǎo)致編譯報錯(變量僅在 if else 內(nèi)部有效)。
- 多余的判斷:條件本身是 bool 類型,卻多此一舉寫
if hasLicense == true,直接寫if hasLicense即可(同理,取反用if \!hasLicense)。
七、本篇總結(jié)
- 核心作用:
if else用于實(shí)現(xiàn)“條件判斷、分支執(zhí)行”,讓程序更靈活,不再是單一順序執(zhí)行。 - 三種常用結(jié)構(gòu):單分支(if)、雙分支(if else)、多分支(if else if else),根據(jù)需求選擇。
- 語法規(guī)范:大括號位置、條件類型、else/else if 的銜接,必須嚴(yán)格遵循(否則編譯報錯)。
- Go 特色:if 可添加初始化語句,變量作用域僅限于 if else 內(nèi)部,簡化代碼。
- 實(shí)戰(zhàn)技巧:結(jié)合輸入、運(yùn)算符,實(shí)現(xiàn)“輸入→判斷→輸出”的完整邏輯;嵌套不超過3層,條件順序要合理。
本篇的 if else 是流程控制的基礎(chǔ),下一篇我們將學(xué)習(xí)另一個核心——for 循環(huán)語句,學(xué)會循環(huán)后,就能實(shí)現(xiàn)重復(fù)執(zhí)行的邏輯(如猜數(shù)字游戲、批量處理數(shù)據(jù)),繼續(xù)加油!
到此這篇關(guān)于Go 語言if else 條件語句使用教程(流程控制)的文章就介紹到這了,更多相關(guān)go if else條件語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang實(shí)現(xiàn)yaml配置文件的解析
這篇文章主要介紹了Golang實(shí)現(xiàn)yaml配置文件的解析,文中通過圖文結(jié)合的方式講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-12-12
go開發(fā)alertmanger實(shí)現(xiàn)釘釘報警
本文主要介紹了go開發(fā)alertmanger實(shí)現(xiàn)釘釘報警,通過自己的url實(shí)現(xiàn)alertmanager的釘釘報警,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07

