go語言條件語句switch與select

2021-10-10 21:27:56 字數 2057 閱讀 8375

一、switch語句

go中switch的幾種用法如下面**示例所示:

package main

import (

"fmt"

)func main()

//用type-switch語句來判斷某個inte***ce變數中實際儲存的變數型別

//寫法一:

switch i := x.(type)

//寫法二

var j = 0

switch j

//寫法三

var k = 0

switch k

//寫法四

var m = 0

switch m

//寫法五

var n = 0

switch

}

執行結果:

二、select語句

1. select語句類似於switch語句,但是select會隨機執行乙個可執行的case。如果沒有case可執行,它將阻塞,直到有case可執行。

select可以監聽channel的資料流動,用於處理非同步io操作,它最大的限制就是每個case語句裡必須是乙個io操作(channel操作)

select是go中的乙個控制結構,類似於用於通訊的switch語句。每個case必須是乙個通訊操作,要麼是傳送要麼是接收。乙個預設的子句應該總是可執行的。

2. select的語法可用以下幾句話簡單表示:

(1) 每個case都必須是乙個通訊

(2) 所有channel表示式都會被求值

(3)  所有被傳送的表示式都會被求值

(4) 如果任意某個通訊可以執行,它就執行;其他被忽略

(5) 如果有多個case都可以執行,select會隨機公平地選出乙個執行。其他不會執行

否則:(1) 如果有default子句,則執行該語句。

(2) 如果沒有default子句,select將阻塞,直到某個通訊可以執行;go不會重新對channel或值進行求值。

3. 在乙個select語句中,go會按順序從頭到尾評估每乙個傳送和接收的語句。如果其中的任意乙個語句可以繼續執行(即沒有被阻塞),那麼就從那些可執行的語句中任意選擇一條來使用。

如果沒有任何一條語句可以執行(即所有通道都被阻塞),那麼有兩種可能的情況:

(1)如果給出了default語句,那麼就會執行default的流程,同時程式的執行會從select語句後的語句中恢復(即繼續執行select之外的**)。

(2)如果沒有default語句,那麼select語句將被阻塞,直到至少有乙個case可以進行下去

幾種用法:

1. 基本用法

//1.基本使用

var c1, c2, c3 chan int

var i1, i2 int

select else

default:

fmt.printf("no communication\n")

}

2.  幾種典型用法

(1) 超時判斷

//比如在下面的場景中,使用全域性reschan來接收response,如果時間超過3s,reschan中還沒有資料返回,則第二條case將執行

var reschan = make(chan int)

//do request

func testtimeout()

}

(2)遇到特定事件時退出程式

//2.退出

var shouldquit = make(chan struct{})

func testexit()

}

(3) 判斷channel是否阻塞

//3.判斷channel是否阻塞

func testblock()

}

Go語言 switch語句

與串聯的if語句類似,switch語句提供了乙個多分支條件執行的方法。不過在這裡用乙個專有名詞來代表分支 case。每乙個case可以攜帶乙個表示式或乙個型別說明符。前者又可被簡稱為case表示式。因此,go語言的switch語句又分為表示式switch語句和型別switch語句。先說表示式swit...

C語言 條件語句 switch語句

用於直接處理不同情況下的多路問題。switch語句又可稱為開關語句,其執行流程和多分支if語句類似。switch 表示式 當switch後面的 表示式 的值與某個case後的 常量表示式 的值相同時,就執行該case後面的語句 組 當遇到break語句時,跳出switch語句,轉向執行switch結...

GO語言基礎 switch語句特性

go語言的switch語句,除去和其他語言一致的基礎使用方法外,還有一些特性 1.每乙個case是可以直接省略break語句的,如果使用break和效果其他語言一致。2.可以使用fallthrough語句,是之匹配後直接使用下乙個case 塊的內容執行。注意 fallthrough語句必須為當前ca...