一、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...