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

Go流程控制代碼詳解

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

Go流程控制

1、條件語句IF

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

2、條件語句switch

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

1、Type Switch

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

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

3、條件語句select

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

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

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

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

1、基本使用:

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

2、典型用法:

1)超時判斷

//比如在下面的場景中,使用全局resChan來接受response,如果時間超過3S,resChan中還沒有數(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:
        }
    //...
}

//再另外一個協(xié)程中,如果運(yùn)行遇到非法操作或不可處理的錯誤,就向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)語句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)語句,然后執(zhí)行post,進(jìn)入第二輪循環(huán)

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

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

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

1、使用場景:

? 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、三個語句都可以配合標(biāo)簽(label)使用
2、標(biāo)簽名區(qū)分大小寫,定義后若不是用會造成編譯錯誤
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流程控制的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • go操作Kafka使用示例詳解

    go操作Kafka使用示例詳解

    這篇文章主要為大家介紹了go操作Kafka使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Golang channel死鎖的幾種情況小結(jié)

    Golang channel死鎖的幾種情況小結(jié)

    本文主要介紹了Golang channel死鎖的幾種情況小結(jié),詳細(xì)的介紹了六種情況,具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • go語言發(fā)送smtp郵件的實(shí)現(xiàn)示例

    go語言發(fā)送smtp郵件的實(shí)現(xiàn)示例

    這篇文章主要介紹了go發(fā)送smtp郵件的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 詳解Go是如何優(yōu)雅的進(jìn)行內(nèi)存管理

    詳解Go是如何優(yōu)雅的進(jìn)行內(nèi)存管理

    Go語言拋棄C/C++中的開發(fā)者管理內(nèi)存的方式,實(shí)現(xiàn)了主動申請與主動釋放管理,增加了逃逸分析和垃圾回收,將開發(fā)者從內(nèi)存管理中釋放出來,作為進(jìn)階的Go開發(fā),了解掌握Go的內(nèi)存管理還是很有必要的
    2023-09-09
  • Go壓縮位圖庫roaring安裝使用詳解

    Go壓縮位圖庫roaring安裝使用詳解

    這篇文章主要為大家介紹了Go壓縮位圖庫roaring安裝使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Go語言實(shí)現(xiàn)的一個簡單Web服務(wù)器

    Go語言實(shí)現(xiàn)的一個簡單Web服務(wù)器

    這篇文章主要介紹了Go語言實(shí)現(xiàn)的一個簡單Web服務(wù)器,本文先是給出一個使用http包建立的Web服務(wù)器源碼,并對比了其它編程語言,需要的朋友可以參考下
    2014-10-10
  • Golang二維切片初始化的實(shí)現(xiàn)

    Golang二維切片初始化的實(shí)現(xiàn)

    這篇文章主要介紹了Golang二維切片初始化的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 詳解Golang time包中的time.Duration類型

    詳解Golang time包中的time.Duration類型

    在日常開發(fā)過程中,會頻繁遇到對時間進(jìn)行操作的場景,使用 Golang 中的 time 包可以很方便地實(shí)現(xiàn)對時間的相關(guān)操作,本文講解一下 time 包中的 time.Duration 類型,需要的朋友可以參考下
    2023-07-07
  • GoLand利用plantuml生成UML類圖

    GoLand利用plantuml生成UML類圖

    本文主要介紹了GoLand利用plantuml生成UML類圖,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • GO語言臨界資源安全問題的深入理解

    GO語言臨界資源安全問題的深入理解

    臨界資源安全問題也就是以往我們常聽到的線程安全問題,本文詳細(xì)的介紹了GO語言臨界資源安全問題的深入理解,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評論

南雄市| 马龙县| 临猗县| 三亚市| 南陵县| 资阳市| 宁城县| 广安市| 德格县| 富平县| 尖扎县| 巴里| 佛教| 隆尧县| 华安县| 天长市| 平远县| 咸丰县| 汤原县| 吉木乃县| 谢通门县| 道孚县| 舞钢市| 通河县| 丁青县| 宁阳县| 布尔津县| 克山县| 吴旗县| 湘乡市| 威宁| 新丰县| 肃北| 广汉市| 桦川县| 周至县| 马山县| 林西县| 定安县| 台湾省| 林甸县|