最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go 語言if else 條件語句使用教程(流程控制)

 更新時間:2026年04月23日 14:25:54   作者:jieyucx  
本文介紹了Go語言的ifelse條件語句及其應(yīng)用場景,包括單分支、雙分支和多分支的語法格式和注意事項(xiàng),還講解了Go語言中if語句的初始化表達(dá)式特性及嵌套ifelse用法,并通過綜合實(shí)戰(zhàn)案例鞏固知識點(diǎn),最后,總結(jié)了常見錯誤及避坑指南

大家好~上一篇博客我們掌握了 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 \>= 18false,跳過了 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內(nèi)存對齊詳解

    golang內(nèi)存對齊詳解

    在golang中,每一種數(shù)據(jù)類型都有其對應(yīng)的數(shù)據(jù)類型大小,也就是占用了多少內(nèi)存空間,我們可以通過unsafe.Sizeof函數(shù),來確定一個變量占用的內(nèi)存字節(jié)數(shù),本文將詳細(xì)給大家介紹golang內(nèi)存對齊,需要的朋友可以參考下
    2023-10-10
  • 自定義Go?Json的序列化方法譯文

    自定義Go?Json的序列化方法譯文

    這篇文章主要為大家介紹了自定義Go?Json序列化方法譯文,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Golang并發(fā)編程重點(diǎn)講解

    Golang并發(fā)編程重點(diǎn)講解

    這篇文章主要介紹了Golang并發(fā)編程,在許多環(huán)境中,實(shí)現(xiàn)對共享變量的正確訪問所需要的微妙之處使并發(fā)編程變得困難。Go鼓勵一種不同的方法,在這種方法中,共享值在通道中傳遞,實(shí)際上,從不由單獨(dú)的執(zhí)行線程主動共享
    2023-04-04
  • Go語言解決大模型API調(diào)用中的超時錯誤的方法

    Go語言解決大模型API調(diào)用中的超時錯誤的方法

    在開發(fā)基于大語言模型(如DeepSeek)的智能應(yīng)用時,我們常通過API實(shí)現(xiàn)自然語言交互,但在處理復(fù)雜任務(wù)或網(wǎng)絡(luò)波動時,開發(fā)者可能會遭遇 context deadline exceeded錯誤,本文將以Go語言為例,深入分析該問題的根源,并提供一套完整的優(yōu)化方案,需要的朋友可以參考下
    2025-05-05
  • GO實(shí)現(xiàn)跳躍表的示例詳解

    GO實(shí)現(xiàn)跳躍表的示例詳解

    跳表全稱叫做跳躍表,簡稱跳表,是一個隨機(jī)化的數(shù)據(jù)結(jié)構(gòu),實(shí)質(zhì)就是一種可以進(jìn)行二分查找的有序鏈表。本文將利用GO語言編寫一個跳表,需要的可以參考一下
    2022-12-12
  • Golang實(shí)現(xiàn)yaml配置文件的解析

    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)釘釘報警

    本文主要介紹了go開發(fā)alertmanger實(shí)現(xiàn)釘釘報警,通過自己的url實(shí)現(xiàn)alertmanager的釘釘報警,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 詳解Go中Map類型和Slice類型的傳遞

    詳解Go中Map類型和Slice類型的傳遞

    這篇文章主要為大家詳細(xì)介紹了Go中Map類型和Slice類型的傳遞,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • go 生成器模式的具體使用

    go 生成器模式的具體使用

    生成器是一種創(chuàng)建型設(shè)計(jì)模式,使你能夠分步驟創(chuàng)建復(fù)雜對象,本文主要介紹了go生成器模式的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • go?test?命令示例詳解

    go?test?命令示例詳解

    go?test是Go用來執(zhí)行測試函數(shù)(test?function)、基準(zhǔn)函數(shù)(benchmark?function)和示例函數(shù)(example?function)的命令,這篇文章主要介紹了go?test?命令,需要的朋友可以參考下
    2023-11-11

最新評論

宣城市| 临朐县| 手机| 万安县| 定陶县| 美姑县| 斗六市| 永城市| 墨江| 九寨沟县| 崇州市| 上林县| 佛学| 三都| 凭祥市| 浙江省| 五莲县| 桦川县| 太白县| 瑞丽市| 鄂伦春自治旗| 黄骅市| 鄢陵县| 石泉县| 通山县| 武威市| 乐平市| 榆中县| 嘉义县| 鄂尔多斯市| 西宁市| 石河子市| 上虞市| 柘城县| 当阳市| 平南县| 巴南区| 宣威市| 延安市| 宣武区| 青海省|