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

一文帶你熟悉Go語言中的for循環(huán)

 更新時間:2022年11月28日 11:28:21   作者:陳明勇  
這篇文章主要和大家分享一下Go語言中for循環(huán)的定義與使用,文中的示例代碼講解詳細,對我們學(xué)習(xí)Go語言有一定的幫助,需要的可以參考一下

前言

哈嘍大家好,我是陳明勇,今天分享的知識是 Go 的循環(huán)結(jié)構(gòu)。如果本文對你有幫助,不妨點個贊,如果你是 Go 語言初學(xué)者,不妨點個關(guān)注,一起成長一起進步,如果本文有錯誤的地方,歡迎指出!

循環(huán)結(jié)構(gòu)

循環(huán)結(jié)構(gòu)是指在程序中需要反復(fù)執(zhí)行某個功能而設(shè)置的一種程序結(jié)構(gòu)。有的編程語言,包含兩種循環(huán)結(jié)構(gòu),一種是 for 循環(huán),另一種是 while 循環(huán),而在 Go 里面,有且只有一種循環(huán) —— for 循環(huán)。接下來看一個示例:

func main() {
    sum := 0
    for num := 1; num <= 10; num++ {
	sum += num
    }
    println(sum) // 55
}

上述代碼實現(xiàn)的功能是在 1-10 之中累加求和,最后的結(jié)果為 55。

  • 上圖所示,for 循環(huán)分為四個部分,第一部分 num := 1 為循環(huán)前置語句,在這一部分,我們一般都會定義一些變量,這些變量被使用于第二部分第三部分里。
  • 第二部分是條件判斷表達式,也就是布爾表達式,多條件可以使用邏輯操作符進行連接。此部分的作用是判定循環(huán)是否繼續(xù)下去,圖中循環(huán)不終止的條件為 num <= 10。只要條件成立,就會去執(zhí)行第三部分.
  • 第三部分為循環(huán)體,只要循環(huán)不終止,程序就會重復(fù)執(zhí)行循環(huán)體里面的代碼。上述例子中,循環(huán)體所做的事情就是累加 num 變量的值。
  • 第四部分為循環(huán)后置語句,這一部分通常會對第一部分所定義的變量進行更新,例如上述例子中,對 num 進行自增。

for 循環(huán)執(zhí)行順序是這樣的:

  • 第一部分(只會執(zhí)行一次)
  • 第二部分(若布爾表達式的值為 false 則終止循環(huán),不進行第三第四部分)
  • 第三部分
  • 第四部分,然后返回第二部分繼續(xù)執(zhí)行。 對于上述四個部分,除了第三部分以外,其他部分都可以省略。如果只留第三部分,那么就形成死循環(huán),以下為示例:
func main() {
        for {
	println("糟糕,死循環(huán)!")
        }
}

在一些場景下,我們會利用死循環(huán)去做一些特定的事,但是最終還是要跳出死循環(huán)的。如何跳出死循環(huán),就涉及到接下來要講的關(guān)鍵字 break。

for-range

除了上面所講的普通 for 循環(huán)的形式,Go 里面還支持一種 for 循環(huán),為 for-range 循環(huán),這是一種什么循環(huán)形式呢?我們來看看例子:

import "fmt"

func main() {
    nums := [4]int{1, 2, 3, 4}
    for i := 0; i < len(nums); i++ {
	fmt.Printf("下標:%d,元素:%d\n", i, nums[i])
    }
}

上述代碼,在循環(huán)前置語句中,聲明數(shù)組的下標,然后循環(huán)體通過下標值打印數(shù)組的元素,我們來看看使用 for-range 的代碼實現(xiàn)是怎么樣的:

import "fmt"

func main() {
    nums := [4]int{1, 2, 3, 4}
    for i, num := range nums {
	fmt.Printf("下標:%d,元素:%d\n", i, num)
    }
}

與普通 for 循環(huán)相比,for-range 的形式代碼量少了很多,除了循環(huán)體保留了下來,其余部分都融入到了 for-range 的語義里。上述代碼中,變量 i 為數(shù)組的下標索引,num 為數(shù)組中的元素值。如果我們所關(guān)注的只是數(shù)組的下標索引或者元素值,可以進行以下改造:

1.只關(guān)注下標索引

import "fmt"

func main() {
        nums := [4]int{1, 2, 3, 4}
        for i := range nums {
            fmt.Printf("下標:%d\n", i)
        }
}

僅僅定義一個 i 變量。

2.只關(guān)注元素值

import "fmt"

func main() {
        nums := [4]int{1, 2, 3, 4}
        for _, num := range nums {
            fmt.Printf("元素值:%d\n", num)
        }
}

索引位置使用 _ 代替,表示忽略下標索引的接收。

3.下標索引和元素值都不關(guān)注

package main

func main() {
        nums := [4]int{1, 2, 3, 4}
        for range nums {
        }
}

break 和 continue 關(guān)鍵字

breakcontinue 關(guān)鍵字用于控制 for 循環(huán)的代碼流程,且只對最近的 for 循環(huán)有效(多層循環(huán)的情況下)。

break

退出 for 循環(huán),循環(huán)體后續(xù)代碼不再執(zhí)行。

continue

終止本輪循環(huán),循環(huán)體后續(xù)代碼不再執(zhí)行,進入下一輪循環(huán)。

示例

循環(huán)遍歷數(shù)組,如果在數(shù)組內(nèi)找到元素值 6,則退出循環(huán)。

func main() {
        nums := [5]int{1, 2, 6, 3, 4}
        for _, num := range nums {
            if num == 6 {
                break
            }
            println("元素:", num)
        }
}

執(zhí)行結(jié)果:

元素: 1
元素: 2

根據(jù)執(zhí)行結(jié)果可知,遍歷數(shù)組到元素 6 的時候,使用 break 關(guān)鍵字,循環(huán)就終止了,后面的元素 34 沒有被打印出來。前面所提到的死循環(huán)也可以使用 break 關(guān)鍵字跳出循環(huán)。

循環(huán)遍歷數(shù)組,只打印奇數(shù),忽略偶數(shù)。

func main() {
        nums := [5]int{1, 2, 6, 3, 4}
        for _, num := range nums {
            if num%2 == 0 {
                continue
            }
            println("元素:", num)
        }
}

執(zhí)行結(jié)果:

元素: 1
元素: 3

遇到偶數(shù)元素,就使用關(guān)鍵字 continue 結(jié)束本輪循環(huán),開始下一輪循環(huán)。

label

Go 語言中,label 語句的作用是標記跳轉(zhuǎn)的目標。示例說明: 遍歷二維數(shù)組,找到元素 3 后結(jié)束跳出整個循環(huán)。

func main() {
    nums := [][]int{
	{1, 2},
	{3, 4},
	{5, 6},
    }
    for i := 0; i < len(nums); i++ {
	println("第", i+1, "輪:")
	for j := 0; j < len(nums[i]); j++ {
	    if nums[i][j] == 3 {
		break
	    }
	    println("元素值:", nums[i][j])
        }
    }
}

執(zhí)行結(jié)果:

第 1 輪:
元素值: 1
元素值: 2
第 2 輪:
第 3 輪:
元素值: 5
元素值: 6

外層循環(huán)一共要循環(huán)三輪,根據(jù)結(jié)果可知,使用 break 關(guān)鍵字,并沒有跳出整個循環(huán)。在第二輪循環(huán)之后,進入內(nèi)層循環(huán),找到元素 4,break 關(guān)鍵字只終止了內(nèi)層循環(huán),外層循環(huán)的第三輪還會繼續(xù)執(zhí)行,這并不是我們想要的結(jié)果。要想達到目標結(jié)果,需要結(jié)合 label 語句實現(xiàn):

func main() {
    nums := [][]int{
	{1, 2},
	{3, 4},
	{5, 6},
    }
outerLoop:
    for i := 0; i < len(nums); i++ {
	println("第", i+1, "輪:")
	for j := 0; j < len(nums[i]); j++ {
	    if nums[i][j] == 3 {
		break outerLoop
	    }
	    println("元素值:", nums[i][j])
	}
    }
}

執(zhí)行結(jié)果:

第 1 輪:
元素值: 1
元素值: 2
第 2 輪:

在第一層循環(huán)前面,使用 label 語句,用 outerLoop 進行標記,然后在 break 關(guān)鍵字后面加上這個標記,就能實現(xiàn)跳出整個循環(huán)。

小結(jié)

本文首先介紹了 Go 里面的普通 for 循環(huán),然后由普通 for 循環(huán)引出了 for-range 循環(huán),對于數(shù)組、切片、Map 等復(fù)合數(shù)據(jù)結(jié)構(gòu),遍歷方式使用 for-range 的形式會更好,特殊的復(fù)合數(shù)據(jù)類型如 Map,遍歷方式也只能用 for-range 的形式。本文還提到了 break、continuelabel 關(guān)鍵字,通過案例介紹了它們的使用場景。

到此這篇關(guān)于一文帶你熟悉Go語言中的for循環(huán)的文章就介紹到這了,更多相關(guān)Go語言 for循環(huán)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang連接PostgreSQL基本操作的實現(xiàn)

    Golang連接PostgreSQL基本操作的實現(xiàn)

    PostgreSQL是常見的免費的大型關(guān)系型數(shù)據(jù)庫,本文主要介紹了Golang連接PostgreSQL基本操作的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • Go語言如何使用golang-jwt/jwt/v4進行JWT鑒權(quán)詳解

    Go語言如何使用golang-jwt/jwt/v4進行JWT鑒權(quán)詳解

    最近項目中需要用到鑒權(quán)機制,golang中jwt可以用,這篇文章主要給大家介紹了關(guān)于Go語言如何使用golang-jwt/jwt/v4進行JWT鑒權(quán)的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • Go多線程中數(shù)據(jù)不一致問題的解決方案(sync鎖機制)

    Go多線程中數(shù)據(jù)不一致問題的解決方案(sync鎖機制)

    在Go語言的并發(fā)編程中,如何確保多個goroutine安全地訪問共享資源是一個關(guān)鍵問題,Go語言提供了sync包,其中包含了多種同步原語,用于解決并發(fā)編程中的同步問題,本文將詳細介紹sync包中的鎖機制,需要的朋友可以參考下
    2024-10-10
  • Go語言操作MySQL的知識總結(jié)

    Go語言操作MySQL的知識總結(jié)

    Go語言中的database/sql包提供了保證SQL或類SQL數(shù)據(jù)庫的泛用接口,并不提供具體的數(shù)據(jù)庫驅(qū)動。本文介紹了Go語言操作MySQL的相關(guān)知識,感興趣的可以了解一下
    2022-11-11
  • Go語言CSP并發(fā)模型實現(xiàn)MPG

    Go語言CSP并發(fā)模型實現(xiàn)MPG

    這篇文章主要為大家介紹了Go語言CSP并發(fā)模型實現(xiàn)MPG圖文詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Go Time庫中時間和日期相關(guān)的操作方法整理

    Go Time庫中時間和日期相關(guān)的操作方法整理

    這篇文章主要為大家整理了Go語言中的time庫,包括時間、日期和時區(qū)等相關(guān)概念及使用方法,希望通過掌握這些知識,大家可以更好地處理時間、日期和時區(qū)相關(guān)的問題
    2023-08-08
  • 使用Golang如何實現(xiàn)簡易的令牌桶算法

    使用Golang如何實現(xiàn)簡易的令牌桶算法

    這篇文章主要介紹了使用Golang如何實現(xiàn)簡易的令牌桶算法問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Golang分布式鎖詳細介紹

    Golang分布式鎖詳細介紹

    分布式鎖是控制分布式系統(tǒng)之間同步訪問共享資源的一種方式。如果不同的系統(tǒng)或是同一個系統(tǒng)的不同主機之間共享了一個或一組資源,那么訪問這些資源時,需要通過一些互斥手段來防止彼此之間的干擾以保證一致性,在這種情況下,就需要使用分布式鎖了
    2022-10-10
  • go mod更新指定的tag的包后,go vendor內(nèi)容未更新問題

    go mod更新指定的tag的包后,go vendor內(nèi)容未更新問題

    這篇文章主要介紹了go mod更新指定的tag的包后,go vendor內(nèi)容未更新問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Go語言擴展原語之ErrGroup的用法詳解

    Go語言擴展原語之ErrGroup的用法詳解

    除標準庫中提供的同步原語外,Go語言還在子倉庫sync中提供了4種擴展原語,本文主要為大家介紹的是其中的golang/sync/errgroup.Group,感興趣的小伙伴可以了解一下
    2023-07-07

最新評論

河北区| 齐齐哈尔市| 五家渠市| 武平县| 成武县| 抚顺市| 封丘县| 彭水| 镇赉县| 顺平县| 曲松县| 沙坪坝区| 普定县| 中阳县| 海南省| 克山县| 嘉鱼县| 武安市| 滕州市| 昌宁县| 承德市| 迁安市| 赤水市| 内黄县| 宣恩县| 衡阳市| 阿荣旗| 仙游县| 丹江口市| 化隆| 禄丰县| 长葛市| 大洼县| 台江县| 侯马市| 和静县| 博客| 临猗县| 正蓝旗| 陇西县| 明溪县|