欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go流程控制代碼詳解

 更新時(shí)間:2023年04月20日 09:32:12   作者:教練我寫(xiě)不出來(lái)  
這篇文章主要詳細(xì)介紹了Go流程控制,文章通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下

Go流程控制

1、條件語(yǔ)句IF

1、簡(jiǎn)單格式(不支持三目運(yùn)算符)
if 布爾表達(dá)式 {
  // 執(zhí)行語(yǔ)句
}
2、if里面包含多個(gè)表達(dá)式的時(shí)候,使用‘;'隔開(kāi)

2、條件語(yǔ)句switch

1、var1可以是任何類型,value1和value2可以是同類型的人和值
switch var1 {
  case value1:
  	xxx
  case value2:
  	xxx
  default:
  	yyy
}

1、Type Switch

? switch還可以被用于type-switch來(lái)判斷某個(gè)interface變量中實(shí)際存儲(chǔ)的變量類型

switch x.(type) {
  case type:
  	statement(s)
  case type:
	  statement(s)
  default:
	  statement(s)
}

3、條件語(yǔ)句select

? select語(yǔ)句類似switch語(yǔ)句,但select會(huì)隨機(jī)執(zhí)行一個(gè)可運(yùn)行的case,如果沒(méi)有case可運(yùn)行,它將阻塞,直到有case可運(yùn)行。

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

// 解釋:每個(gè)case必須是一個(gè)通信,所有的channel表達(dá)式都會(huì)被求值,所有被發(fā)送的表達(dá)式都會(huì)被求值,
// 1、如果任意某個(gè)通信可以執(zhí)行,就執(zhí)行,其余忽略
// 2、如果有多個(gè)case可以執(zhí)行,select隨機(jī)且公平的選出一個(gè)執(zhí)行
// 3、否則:如果有default語(yǔ)句,執(zhí)行;沒(méi)有default,select將阻塞,直到某個(gè)通信可以運(yùn)行,Go不會(huì)重新對(duì)Channel或值進(jìn)行求職

1、golang select的使用以及典型用法

1、基本使用:

用于處理異步IO操作,select會(huì)監(jiān)聽(tīng)case語(yǔ)句中的channel的讀寫(xiě)操作,當(dāng)case中channel讀寫(xiě)操作為非阻塞狀態(tài),將觸發(fā)相應(yīng)的動(dòng)作。(case語(yǔ)句必須是channel操作)

2、典型用法:

1)超時(shí)判斷

//比如在下面的場(chǎng)景中,使用全局resChan來(lái)接受response,如果時(shí)間超過(guò)3S,resChan中還沒(méi)有數(shù)據(jù)返回,則第二條case將執(zhí)行
var resChan = make(chan int)
// do request
func test() {
    select {
    case data := <-resChan:
        doData(data)
    case <-time.After(time.Second * 3):
        fmt.Println("request time out")
    }
}

func doData(data int) {
    //...
}

2)退出

//主線程(協(xié)程)中如下:
var shouldQuit=make(chan struct{})
fun main(){
    {
        //loop
    }
    //...out of the loop
    select {
        case <-c.shouldQuit:
            cleanUp()
            return
        default:
        }
    //...
}

//再另外一個(gè)協(xié)程中,如果運(yùn)行遇到非法操作或不可處理的錯(cuò)誤,就向shouldQuit發(fā)送數(shù)據(jù)通知程序停止運(yùn)行
close(shouldQuit)

3)判斷channel是否阻塞

//在某些情況下是存在不希望channel緩存滿了的需求的,可以用如下方法判斷
ch := make (chan int, 5)
//...
data:=0
select {
case ch <- data:
default:
    //做相應(yīng)操作,比如丟棄data。視需求而定
}

4、循環(huán)語(yǔ)句for

for init; condition; post {}
for condition {}
for {}

// 解釋:1)init一般為賦值表達(dá)式,給控制變量賦初始值;2)condition:關(guān)系表達(dá)式或邏輯表達(dá)式,循環(huán)控制條件;3)post:一般為賦值表達(dá)式,給控制變量增量或減量
// 執(zhí)行流程:判別賦值表達(dá)式init是否滿足condition給定的條件,若為真,則執(zhí)行循環(huán)語(yǔ)句,然后執(zhí)行post,進(jìn)入第二輪循環(huán)

5、循環(huán)語(yǔ)句range

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

for 和 for range 有什么區(qū)別?

1、使用場(chǎng)景:

? 1)for可以遍歷array、slice、key為整形遞增的map、string

? 2)for range 可以完成for所有事情,卻能做for不能做的事情,包括遍歷key為string類型的map、遍歷channel

 6、循環(huán)控制goto、break、…

Goto、Break、Continue
1、三個(gè)語(yǔ)句都可以配合標(biāo)簽(label)使用
2、標(biāo)簽名區(qū)分大小寫(xiě),定義后若不是用會(huì)造成編譯錯(cuò)誤
3、continue、break配合標(biāo)簽(label)可以用于多層循環(huán)跳出
4、goto調(diào)整執(zhí)行位置,與continue、break配合標(biāo)簽(label)的結(jié)果并不相同

以上就是Go流程控制代碼詳解的詳細(xì)內(nèi)容,更多關(guān)于Go流程控制的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • go mock server的簡(jiǎn)易實(shí)現(xiàn)示例

    go mock server的簡(jiǎn)易實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了go mock server的簡(jiǎn)易實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • golang守護(hù)進(jìn)程用法示例

    golang守護(hù)進(jìn)程用法示例

    這篇文章主要介紹了golang守護(hù)進(jìn)程用法,結(jié)合實(shí)例形式分析了Go語(yǔ)言守護(hù)進(jìn)程的具體實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下
    2016-07-07
  • Go prometheus metrics條目自動(dòng)回收與清理方法

    Go prometheus metrics條目自動(dòng)回收與清理方法

    這篇文章主要為大家介紹了Go prometheus metrics條目自動(dòng)回收與清理方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 手把手教你用VS?code快速搭建一個(gè)Golang項(xiàng)目

    手把手教你用VS?code快速搭建一個(gè)Golang項(xiàng)目

    Go語(yǔ)言是采用UTF8編碼的,理論上使用任何文本編輯器都能做Go語(yǔ)言開(kāi)發(fā),下面這篇文章主要給大家介紹了關(guān)于使用VS?code快速搭建一個(gè)Golang項(xiàng)目的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • 淺談golang類型斷言,失敗類型斷言返回值問(wèn)題

    淺談golang類型斷言,失敗類型斷言返回值問(wèn)題

    這篇文章主要介紹了淺談golang類型斷言,失敗類型斷言返回值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 重學(xué)Go語(yǔ)言之變量與常量的聲明與使用詳解

    重學(xué)Go語(yǔ)言之變量與常量的聲明與使用詳解

    變量、常量的聲明與使用是掌握一門(mén)編程語(yǔ)言的基礎(chǔ),在這篇文章中,小編就來(lái)帶大家學(xué)習(xí)一下Go語(yǔ)言是怎么樣聲明和使用變量與常量吧
    2023-03-03
  • golang限流庫(kù)兩個(gè)大bug(半年之久無(wú)人提起)

    golang限流庫(kù)兩個(gè)大bug(半年之久無(wú)人提起)

    最近我的同事在使用uber-go/ratelimit[1]這個(gè)限流庫(kù)的時(shí)候,遇到了兩個(gè)大?bug,這兩個(gè)?bug?都是在這個(gè)庫(kù)的最新版本(v0.3.0)中存在的,而這個(gè)版本從?7?月初發(fā)布都已經(jīng)過(guò)半年了,都沒(méi)人提?bug,難道大家都沒(méi)遇到過(guò)么
    2023-12-12
  • golang?beego框架路由ORM增刪改查完整案例

    golang?beego框架路由ORM增刪改查完整案例

    這篇文章主要為大家介紹了golang?beego框架路由ORM增刪改查完整案例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • 解決golang.org不能訪問(wèn)的問(wèn)題(推薦)

    解決golang.org不能訪問(wèn)的問(wèn)題(推薦)

    這篇文章主要介紹了解決golang.org不能訪問(wèn)的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-11-11
  • 構(gòu)建Golang應(yīng)用最小Docker鏡像的實(shí)現(xiàn)

    構(gòu)建Golang應(yīng)用最小Docker鏡像的實(shí)現(xiàn)

    這篇文章主要介紹了構(gòu)建Golang應(yīng)用最小Docker鏡像的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評(píng)論