搜尋
首頁後端開發Golanggolang 流程控制

Golang 是一種高效且現代的程式語言,其在流程控制方面提供了豐富的功能。本文將探討 Golang 中的流程控制結構,包括條件語句、循環語句和跳躍語句,以幫助讀者更好地理解和應用這些結構。

條件語句

Golang 中的條件語句包括 if 語句、switch 語句和 select 語句。

  1. if 語句

if 語句用於進行條件判斷,語法如下:

if condition {
    statement(s)
} else if condition {
    statement(s)
} else {
    statement(s)
}

其中,condition 是條件表達式,用於判斷真假。如果條件為真,則執行 if 後面的語句區塊;否則,跳過該語句區塊並執行下一個語句。

如果 condition 後面有 else if 關鍵字,則依序判斷每個條件式,執行第一個為真的語句區塊。如果所有條件表達式都為假,則執行 else 後面的語句區塊。如果沒有 else 區塊,則條件為假時不執行任何語句。

以下是一個if 語句的範例:

package main

import "fmt"

func main() {
    var a int = 10
    if a < 20 {
        fmt.Printf("a 小于 20
")
    }
    fmt.Printf("a 的值为 : %d
", a)
}

輸出結果:

a 小于 20
a 的值为 : 10
  1. switch 語句

switch 語句用於多條件判斷,語法如下:

switch expression {
    case value1:
        statement(s)
    case value2:
        statement(s)
    case value3:
        statement(s)
    default:
        statement(s)
}

其中,expression 是一個表達式,用於匹配case 子句中的常數或變數。如果匹配成功,則執行對應的語句區塊;否則,跳過該語句區塊並執行下一個 case 子句(如果存在)。

如果所有 case 子句都未符合成功,則執行 default 後面的語句區塊。如果沒有 default 子句,則不執行任何語句。

以下是一個switch 語句的範例:

package main

import "fmt"

func main() {
    var grade string = "B"
    var marks int = 90

    switch marks {
        case 90:
            grade = "A"
        case 80:
            grade = "B"
        case 60, 70:
            grade = "C"
        default:
            grade = "D"
    }

    switch {
        case grade == "A" :
            fmt.Printf("优秀!
" )
        case grade == "B", grade == "C" :
            fmt.Printf("良好
" )
        case grade == "D" :
            fmt.Printf("及格
" )
        case grade == "F":
            fmt.Printf("不及格
" )
        default:
            fmt.Printf("差
" )
    }
    fmt.Printf("你的等级是 %s
", grade )
}

輸出結果:

良好!
你的等级是 B
  1. select 語句
##select 語句用於同時監聽多個通道,語法如下:

select {
    case communication clause 1:
        statement(s)
    case communication clause 2:
        statement(s)
    .............
    default:
        statement(s)
}

其中,communication clause 指的是一個通道或一個帶有方向的通道操作,包括發送操作和接收操作。如果某個通道有資料可讀或可寫,則執行對應的語句區塊;否則,跳過該通道並執行下一個 communication clause。如果所有通道都沒有資料可讀或可寫,則執行 default 後面的語句區塊。

以下是一個select 語句的範例:

package main

import "fmt"

func fibonacci(c, quit chan int) {
    x, y := 0, 1
    for {
        select {
        case c <- x:
            x, y = y, x+y
        case <-quit:
            fmt.Println("quit")
            return
        }
    }
}

func main() {
    c := make(chan int)
    quit := make(chan int)
    go func() {
        for i := 0; i < 10; i++ {
            fmt.Println(<-c)
        }
        quit <- 0
    }()
    fibonacci(c, quit)
}

輸出結果:

0
1
1
2
3
5
8
13
21
34
quit

迴圈語句

Golang 中的迴圈語句包括for 語句和range 語句。

    for 語句
for 語句用於循環執行一段程式碼,語法如下:

for init; condition; post {
    statement(s);
}

其中,init 用於何時開始循環,condition用於判斷循環是否繼續,post 用於控制循環變數的操作。

以下是一個for 語句的範例:

package main

import "fmt"

func main() {
    var b int = 15
    var a int

    for i := 0; i < 10; i++ {
        fmt.Printf("i 的值为: %d
", i)
    }

    for a < b {
        a++
        fmt.Printf("a 的值为: %d
", a)
    }
}

輸出結果:

i 的值为: 0
i 的值为: 1
i 的值为: 2
i 的值为: 3
i 的值为: 4
i 的值为: 5
i 的值为: 6
i 的值为: 7
i 的值为: 8
i 的值为: 9
a 的值为: 1
a 的值为: 2
a 的值为: 3
a 的值为: 4
a 的值为: 5
a 的值为: 6
a 的值为: 7
a 的值为: 8
a 的值为: 9
a 的值为: 10
a 的值为: 11
a 的值为: 12
a 的值为: 13
a 的值为: 14
a 的值为: 15

    range 語句
range 語句用於遍歷陣列、切片、通道或映射的元素,語法如下:

for key, value := range oldMap {
    newMap[key] = value
}

其中,key 和value 分別表示目前元素的鍵和值。

以下是一個range 語句的範例:

package main

import "fmt"

func main() {
    nums := []int{2, 3, 4}
    sum := 0
    for _, num := range nums {
        sum += num
    }
    fmt.Println("sum:", sum)

    for i, num := range nums {
        if num == 3 {
            fmt.Println("index:", i)
        }
    }

    kvs := map[string]string{"a": "apple", "b": "banana"}
    for k, v := range kvs {
        fmt.Printf("%s -> %s
", k, v)
    }
}

輸出結果:

sum: 9
index: 1
a -> apple
b -> banana

跳轉語句

Golang 中的跳轉語句包括break、continue和goto。

    break 語句
break 語句用於中斷循環體,語法如下:

for i := 0; i < 10; i++ {
    if i == 5 {
        break
    }
    fmt.Printf("%d ", i)
}
fmt.Println()

輸出結果:

0 1 2 3 4

    #continue 語句
continue 語句用於中斷目前迴圈體的本次迭代,語法如下:

for i := 0; i < 10; i++ {
    if i == 5 {
        continue
    }
    fmt.Printf("%d ", i)
}
fmt.Println()

輸出結果:

0 1 2 3 4 6 7 8 9

    #goto 語句
goto 語句用於無條件跳到某個程式碼標籤(label)處執行,語法如下:

goto label;
...
label: statement

其中,label 是一個識別符,statement 是執行語句。

以下是一個goto 語句的範例:

package main

import "fmt"

func main() {
    i := 0
Again:
    fmt.Printf("循环执行次数:%d
", i)
    i++
    if i < 10 {
        goto Again
    }
}

輸出結果:

循环执行次数:0
循环执行次数:1
循环执行次数:2
循环执行次数:3
循环执行次数:4
循环执行次数:5
循环执行次数:6
循环执行次数:7
循环执行次数:8
循环执行次数:9

總結

Golang 中的流程控制結構包含條件語句、循環語句和跳轉語句。條件語句包括 if、switch 和 select 語句,用於進行單一條件或多條件判斷。迴圈語句包含 for 和 range 語句,用於迴圈執行一段程式碼或遍歷某個元素。跳轉語句包括 break、continue 和 goto 語句,用於中斷目前迴圈或無條件跳到某個標籤處執行。在實際程式設計中,需要根據需求靈活選擇合適的流程控制結構來實現程式碼邏輯。

以上是golang 流程控制的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
GO中的接口和多態性:實現代碼可重複使用性GO中的接口和多態性:實現代碼可重複使用性Apr 29, 2025 am 12:31 AM

Interfacesand -polymormormormormormingingoenhancecodereusanity和Maintainability.1)defineInterfaceSattherightabStractractionLevel.2)useInterInterFacesFordEffordExpentIndention.3)ProfileCodeTomeAgePerformancemacts。

'初始化”功能在GO中的作用是什麼?'初始化”功能在GO中的作用是什麼?Apr 29, 2025 am 12:28 AM

initiTfunctioningOrunSautomation beforeTheMainFunctionToInitializePackages andSetUptheNvironment.it'susefulforsettingupglobalvariables,資源和performingOne-timesEtepaskSarpaskSacraskSacrastAscacrAssanyPackage.here'shere'shere'shere'shere'shodshowitworks:1)Itcanbebeusedinanananainapthecate,NotjustAckAckAptocakeo

GO中的界面組成:構建複雜的抽象GO中的界面組成:構建複雜的抽象Apr 29, 2025 am 12:24 AM

接口組合在Go編程中通過將功能分解為小型、專注的接口來構建複雜抽象。 1)定義Reader、Writer和Closer接口。 2)通過組合這些接口創建如File和NetworkStream的複雜類型。 3)使用ProcessData函數展示如何處理這些組合接口。這種方法增強了代碼的靈活性、可測試性和可重用性,但需注意避免過度碎片化和組合複雜性。

在GO中使用Init功能時的潛在陷阱和考慮因素在GO中使用Init功能時的潛在陷阱和考慮因素Apr 29, 2025 am 12:02 AM

initfunctionsingoareAutomationalCalledBeLedBeForeTheMainFunctionandAreuseFulforSetupButcomeWithChallenges.1)executiondorder:totiernitFunctionSrunIndIndefinitionorder,cancancapationSifsUsiseSiftheyDepplothother.2)測試:sterfunctionsmunctionsmunctionsMayInterfionsMayInterferfereWithTests,b

您如何通過Go中的地圖迭代?您如何通過Go中的地圖迭代?Apr 28, 2025 pm 05:15 PM

文章通過GO中的地圖討論迭代,專注於安全實踐,修改條目和大型地圖的性能注意事項。

您如何在GO中創建地圖?您如何在GO中創建地圖?Apr 28, 2025 pm 05:14 PM

本文討論了創建和操縱GO中的地圖,包括初始化方法以及添加/更新元素。

陣列和切片的GO有什麼區別?陣列和切片的GO有什麼區別?Apr 28, 2025 pm 05:13 PM

本文討論了GO中的數組和切片之間的差異,重點是尺寸,內存分配,功能傳遞和用法方案。陣列是固定尺寸的,分配的堆棧,而切片是動態的,通常是堆積的,並且更靈活。

您如何在Go中創建切片?您如何在Go中創建切片?Apr 28, 2025 pm 05:12 PM

本文討論了在GO中創建和初始化切片,包括使用文字,製造功能以及切片現有數組或切片。它還涵蓋了切片語法並確定切片長度和容量。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版