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

Golang流程控制語句的具體使用

 更新時間:2024年05月10日 11:37:09   作者:2021dragon  
在編寫程序時,流程控制是必不可少的一部分,本文主要介紹了Golang流程控制語句的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

順序控制

順序控制

默認(rèn)情況下,Go代碼執(zhí)行順序是按照從上到下依次執(zhí)行的,這種按照順序執(zhí)行的代碼就叫做順序語句。如下:

package main

import "fmt"

func main() {
	// 順序控制
	fmt.Println("statement 1...")
	fmt.Println("statement 2...")
	fmt.Println("statement 3...")
}

分支控制

if語句

if語句

Go中if語句的基本語法如下:

在這里插入圖片描述

使用案例如下:

package main

import "fmt"

func main() {
	// if語句
	var num1, num2 int = 10, 20
	if num1 > num2 {
		fmt.Println("num1 > num2")
	} else if num1 < num2 {
		fmt.Println("num1 < num2")
	} else {
		fmt.Println("num1 = num2")
	}
}

說明一下:

  • 執(zhí)行if語句時,會依次判斷各個條件表達(dá)式,找到第一個結(jié)果為true的if分支并執(zhí)行對應(yīng)的代碼塊,如果所有條件表達(dá)式都不成立,則執(zhí)行最后的else代碼塊。
  • if語句中的else if分支可以有一個或多個,最后的else分支是可選的,if語句支持嵌套。
  • 每一個if分支的{}都是必須的,就算代碼塊中只有一行代碼也不能省略,否則會產(chǎn)生報錯。
  • if語句中的條件表達(dá)式不需要用()包裹,雖然加上也不會報錯,但是不建議這樣做。
  • if語句的條件表達(dá)式不能是賦值語句,比如if flag = false,否則會產(chǎn)生報錯。

if后聲明變量

if語句支持在if后聲明一個變量,并以分號結(jié)束,然后在分號后面再給出條件表達(dá)式。如下:

package main

import "fmt"

func main() {
	// if后聲明變量
	var num = 10
	if base := 20; num < base {
		fmt.Println("num < base")
	}
}

注意: 在if后聲明的變量僅在if語句中有效。

switch語句

switch語句

Go中switch語句的基本語法如下:

在這里插入圖片描述

使用案例如下:

package main

import "fmt"

func main() {
	// switch語句
	var year, month int = 2024, 4
	switch month {
	case 1, 3, 5, 7, 8, 10, 12:
		fmt.Println("這個月有31天")
	case 4, 6, 9, 11:
		fmt.Println("這個月有30天")
	case 2:
		day := 28
		if (year%4 == 0 && year%100 != 0) || (year%400 == 0) {
			day++
		}
		fmt.Printf("這個月有%d天\n", day)
	default:
		fmt.Println("無效月份!")
	}
}

說明一下:

  • 執(zhí)行switch語句時,會將表達(dá)式依次與各個case后的表達(dá)式進行比較,如果匹配成功,則執(zhí)行對應(yīng)case的代碼塊,如果所有case后的表達(dá)式都不匹配,則執(zhí)行最后的default代碼塊,最后的default是可選的。
  • switch語句中的case可以有多個,并且每個case后可以帶多個表達(dá)式,表達(dá)式之間使用逗號分隔。程序執(zhí)行完case語句的代碼塊后會直接退出switch控制,不需要在代碼塊最后加break語句。
  • switch和case后面的表達(dá)式可以是常量值、變量、有返回值的函數(shù)調(diào)用等,case后的表達(dá)式如果是常量值(字面量),則要求不能重復(fù)。case后的各個表達(dá)式的值的數(shù)據(jù)類型,必須和switch后的表達(dá)式的數(shù)據(jù)類型一致。

switch后聲明變量

switch語句支持在switch后聲明一個變量,并以分號結(jié)束,然后在分號后面再給出表達(dá)式。如下:

package main

import "fmt"

func main() {
	// switch后聲明變量
	switch year, month := 2024, 4; month {
	case 1, 3, 5, 7, 8, 10, 12:
		fmt.Println("這個月有31天")
	case 4, 6, 9, 11:
		fmt.Println("這個月有30天")
	case 2:
		day := 28
		if (year%4 == 0 && year%100 != 0) || (year%400 == 0) {
			day++
		}
		fmt.Printf("這個月有%d天\n", day)
	default:
		fmt.Println("無效月份!")
	}
}

注意: 在switch后聲明的變量僅在switch語句中有效。

switch穿透

在執(zhí)行完對應(yīng)的case語句的代碼塊后,程序會直接退出switch控制,如果希望程序繼續(xù)執(zhí)行下一個case語句的代碼塊,可以在代碼塊的最后通過fallthough關(guān)鍵字實現(xiàn)switch穿透。如下:

package main

import "fmt"

func main() {
	// switch穿透
	var num int = 2
	switch num {
	case 1:
		fmt.Println("case 1 block...")
	case 2:
		fmt.Println("case 2 block...")
		fallthrough // 繼續(xù)執(zhí)行下一個case的代碼塊
	case 3:
		fmt.Println("case 3 block...")
	default:
		fmt.Println("default block...")
	}
}

注意: switch穿透默認(rèn)只會穿透一層,如果希望執(zhí)行下面更多case的代碼塊,需要再次穿透。

Type Switch

switch語句可以用于判斷某個interface變量實際指向的變量類型,然后根據(jù)不同的類型執(zhí)行相應(yīng)的代碼邏輯。如下:

package main

import "fmt"

func main() {
	// Type Switch
	var num int = 10
	var x interface{} = num
	switch t := x.(type) {
	case int:
		fmt.Println("int類型")
	case float64:
		fmt.Println("float64類型")
	case string:
		fmt.Println("string類型")
	default:
		fmt.Printf("未處理類型: %T\n", t)
	}
}

說明一下:

  • interface{}叫做空接口類型,其可以接收任意類型的變量值,在必要時需要通過類型斷言的方式獲取到變量原本的類型,而Type Switch就是一種類型斷言的方式。

無表達(dá)式的switch

switch語句后可以不帶表達(dá)式,這時在case后放條件表達(dá)式可以達(dá)到if語句的效果。如下:

package main

import "fmt"

func main() {
	// 無表達(dá)式的switch
	var num1, num2 int = 10, 20
	switch {
	case num1 > num2:
		fmt.Println("num1 > num2")
	case num1 < num2:
		fmt.Println("num1 < num2")
	default:
		fmt.Println("num1 = num2")
	}
}

說明一下:

  • 這里每個case后也可以帶多個條件表達(dá)式,表達(dá)式之間使用逗號分隔。

循環(huán)控制

for循環(huán)語句

for循環(huán)語句

Go中for循環(huán)語句的基本語法如下:

在這里插入圖片描述

使用案例如下:

package main

import (
	"fmt"
)

func main() {
	// for循環(huán)語句
	for i := 1; i &lt;= 10; i++ {
		fmt.Printf("%d ", i)
	}
	fmt.Println()
}

說明一下:

  • 在執(zhí)行for循環(huán)語句時,會先執(zhí)行循環(huán)遍歷初始化的語句,然后不斷根據(jù)循環(huán)條件判斷是否執(zhí)行循環(huán)體操作,如果循環(huán)條件為真則執(zhí)行一次循環(huán)體操作并進行一次循環(huán)變量迭代,如果循環(huán)條件為假則退出for循環(huán)。

for循環(huán)的其他用法

在使用for循環(huán)語句時,可以只在for后指明循環(huán)條件,而將循環(huán)變量的初始化和循環(huán)變量的迭代放在其他位置。如下:

在這里插入圖片描述

使用案例如下:

package main

import (
	"fmt"
)

func main() {
	// for循環(huán)語句
	i := 1
	for i &lt;= 10 {
		fmt.Printf("%d ", i)
		i++
	}
	fmt.Println()
}

在使用for循環(huán)語句時,以for{}for ; ; {}表示無限循環(huán),通常需要配合break語句使用。如下:

在這里插入圖片描述

使用案例如下:

package main

import (
	"fmt"
)

func main() {
	// for循環(huán)語句
	for {
		fmt.Println("這是一個死循環(huán)...")
		time.Sleep(time.Second)
	}
}

說明一下:

  • Sleep是time包中的一個函數(shù),用于阻塞當(dāng)前goroutine指定時間,其參數(shù)的類型是Duration。
  • Second是time包中的一個Duration類型的常量,表示1秒。

for range循環(huán)

Go中的for range循環(huán),可以方便的對string、數(shù)組、切片、map等數(shù)據(jù)類型中的元素進行遍歷。如下:

package main

import (
	"fmt"
)

func main() {
	// for range循環(huán)
	var s string = "Hello 世界"
	for index, value := range s {
		fmt.Printf("s[%d] = %c\n", index, value)
	}
}

在使用for range遍歷string時,它會按照UTF-8編碼格式解析字符串,并以Unicode字符作為迭代的單位,每次迭代都會返回字符串中的一個Unicode字符(rune)和對應(yīng)的索引,無論是單字節(jié)的ASCII字符還是多字節(jié)的漢字,都會被正確地解析并返回。上述程序的運行結(jié)果如下:

在這里插入圖片描述

說明一下:

  • 在for range循環(huán)中遍歷字符串時,每次迭代會返回兩個值,第一個是字符的索引,第二個是字符的值,當(dāng)遍歷結(jié)束后會自動退出for循環(huán)。

跳轉(zhuǎn)控制

break語句

break語句

Go中break語句可以用于跳出for循環(huán)語句或switch語句。如下:

package main

import "fmt"

func main() {
	// break語句
	for i := 0; i &lt; 10; i++ {
		if i == 6 {
			break
		}
		fmt.Printf("%d ", i)
	}
	fmt.Println()
}

在多層循環(huán)嵌套語句中,break默認(rèn)只會跳出最近的for循環(huán),如果希望跳出更外層的for循環(huán),可以通過標(biāo)簽進行指明。如下:

package main

import "fmt"

func main() {
	// break標(biāo)簽
label:
	for i := 0; i &lt; 10; i++ {
		for j := 0; j &lt; 10; j++ {
			for k := 0; k &lt; 10; k++ {
				if i == 2 &amp;&amp; j == 3 &amp;&amp; k == 4 {
					break label
				}
				fmt.Printf("i = %d, j = %d, k = %d\n", i, j, k)
			}
		}
	}
}

說明一下:

  • 當(dāng)使用break語句指定標(biāo)簽時,該標(biāo)簽必須用于標(biāo)記循環(huán)語句或switch語句的起始位置。
  • 標(biāo)簽的命名應(yīng)該符合標(biāo)識符命名規(guī)則,標(biāo)簽名由用戶自定義。

continue語句

continue語句

Go中continue語句用于for循環(huán)中,可以停止當(dāng)前的迭代并進入下一次迭代。如下:

package main

import "fmt"

func main() {
	// continue語句
	for i := 0; i &lt; 10; i++ {
		if i == 6 {
			continue
		}
		fmt.Printf("%d ", i)
	}
	fmt.Println()
}

在多層循環(huán)嵌套語句中,continue默認(rèn)只會作用到最近的for循環(huán),如果希望作用到更外層的for循環(huán),可以通過標(biāo)簽進行指明。如下:

package main

import "fmt"

func main() {
	// continue標(biāo)簽
label:
	for i := 0; i &lt; 10; i++ {
		for j := 0; j &lt; 10; j++ {
			for k := 0; k &lt; 10; k++ {
				if i == 2 &amp;&amp; j == 3 &amp;&amp; k == 4 {
					continue label
				}
				fmt.Printf("i = %d, j = %d, k = %d\n", i, j, k)
			}
		}
	}
}

說明一下:

  • 當(dāng)使用continue語句指定標(biāo)簽時,該標(biāo)簽必須用于標(biāo)記循環(huán)語句的起始位置。

goto語句

goto語句

Go中的goto語句用于無條件地跳轉(zhuǎn)到程序中指定標(biāo)簽的位置。如下:

package main

import "fmt"

func main() {
	// goto語句
	for i := 0; i &lt; 10; i++ {
		for j := 0; j &lt; 10; j++ {
			for k := 0; k &lt; 10; k++ {
				if i == 2 &amp;&amp; j == 3 &amp;&amp; k == 4 {
					goto label
				}
				fmt.Printf("i = %d, j = %d, k = %d\n", i, j, k)
			}
		}
	}
label:
	fmt.Println("other code...")
}

說明一下:

  • goto語句通常與條件語句配合使用,用于實現(xiàn)條件轉(zhuǎn)移,跳出循環(huán)體等功能。
  • Go程序中一般不主張使用goto語句,以免造成程序流程混亂。

return語句

return語句

Go中的return語句在方法或函數(shù)中使用,表示跳出所在的方法或函數(shù)。如下:

package main

import "fmt"

func main() {
	// return語句
	for i := 0; i &lt; 10; i++ {
		if i == 6 {
			return
		}
		fmt.Printf("%d ", i)
	}
}

說明一下:

  • 在普通函數(shù)中使用return語句,表示跳出當(dāng)前函數(shù),可以理解成終止函數(shù)。
  • 在main函數(shù)中使用return語句,表示終止main函數(shù),即終止整個程序。

到此這篇關(guān)于Golang流程控制語句的具體使用的文章就介紹到這了,更多相關(guān)Golang流程控制語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語言獲取文件的名稱、前綴、后綴

    Go語言獲取文件的名稱、前綴、后綴

    這篇文章主要介紹了Go語言獲取文件的名稱、前綴、后綴,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • 淺析Go語言如何在終端里實現(xiàn)倒計時

    淺析Go語言如何在終端里實現(xiàn)倒計時

    這篇文章主要為大家詳細(xì)介紹了Go語言中是如何在終端里實現(xiàn)倒計時的,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • GoLand編寫 TCP 端口掃描器的詳細(xì)過程

    GoLand編寫 TCP 端口掃描器的詳細(xì)過程

    TCP,也就是傳輸控制協(xié)議(Transmission Control Protocol),這篇文章主要介紹了Go語言(Golang)編寫 TCP 端口掃描器,需要的朋友可以參考下
    2023-05-05
  • Golang的Crypto/SHA256庫實戰(zhàn)指南

    Golang的Crypto/SHA256庫實戰(zhàn)指南

    無論是在保護數(shù)據(jù)安全、驗證數(shù)據(jù)完整性,還是在構(gòu)建復(fù)雜的安全系統(tǒng)中,crypto/sha256都是Golang程序員不可或缺的工具,本文主要介紹了Golang的Crypto/SHA256庫實戰(zhàn)指南,感興趣的可以了解一下
    2024-02-02
  • golang避免內(nèi)存溢出的方法

    golang避免內(nèi)存溢出的方法

    內(nèi)存溢出(Memory Overflow)是指程序在運行時超出了分配給它的內(nèi)存限制,從而導(dǎo)致程序異常或崩潰的現(xiàn)象,內(nèi)存溢出的問題在任何編程語言中都可能出現(xiàn),Go 語言也不例外,本文給大家介紹了golang是如何解決內(nèi)存溢出的,需要的朋友可以參考下
    2024-09-09
  • 用Go語言編寫一個簡單的分布式系統(tǒng)

    用Go語言編寫一個簡單的分布式系統(tǒng)

    這篇文章主要介紹了用Go語言編寫一個簡單的分布式系統(tǒng),文中的代碼示例講解的非常詳細(xì),對我們的學(xué)習(xí)或工作有一定的幫助,感興趣的小伙伴跟著小編一起來看看吧
    2023-08-08
  • 使用goland調(diào)試遠(yuǎn)程代碼的操作步驟

    使用goland調(diào)試遠(yuǎn)程代碼的操作步驟

    大家都知道如何在goland調(diào)試遠(yuǎn)程代碼嗎?今天小編給大家分享一篇教程幫助大家學(xué)習(xí)goland調(diào)試遠(yuǎn)程代碼的操作步驟,感興趣的朋友跟隨小編一起看看吧
    2021-06-06
  • Golang中可比較的數(shù)據(jù)類型詳解

    Golang中可比較的數(shù)據(jù)類型詳解

    在日常開發(fā)中,比較操作是最常用的基本操作之一,可以用來判斷變量之間是否相等或者對應(yīng)的大小關(guān)系,本文將深入解析 Golang 中可比較的數(shù)據(jù)類型,并結(jié)合代碼示例來說明如何在不同情況下進行比較,需要的朋友可以參考下
    2024-01-01
  • go程序部署到linux上運行的實現(xiàn)方法

    go程序部署到linux上運行的實現(xiàn)方法

    本文主要介紹了go程序部署到linux上運行的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • gin?框架下使用URL重定向

    gin?框架下使用URL重定向

    本文主要介紹了gin?框架下使用URL重定向,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-05-05

最新評論

仲巴县| 临澧县| 英超| 辽宁省| 秀山| 溧阳市| 平安县| 安宁市| 宣恩县| 志丹县| 柳州市| 当雄县| 景德镇市| 无为县| 安国市| 宜宾市| 崇信县| 余江县| 广河县| 西城区| 长顺县| 宿州市| 五河县| 贵阳市| 纳雍县| 乐至县| 长岛县| 镇坪县| 墨竹工卡县| 浦东新区| 大渡口区| 蒲江县| 荆州市| 富源县| 福建省| 金华市| 海淀区| 中牟县| 勐海县| 大同县| 潍坊市|