select 語句使得一個 goroutine 在多個通訊操作上等待。

站在用戶的角度思考問題,與客戶深入溝通,找到恒山網站設計與恒山網站推廣的解決方案,憑借多年的經驗,讓設計與互聯(lián)網技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:做網站、成都做網站、企業(yè)官網、英文網站、手機端網站、網站推廣、域名與空間、雅安服務器托管、企業(yè)郵箱。業(yè)務覆蓋恒山地區(qū)。
select 會阻塞,直到條件分支中的某個可以繼續(xù)執(zhí)行,這時就會執(zhí)行那個條件分支。當多個都準備好的時候,會隨機選擇一個。
復制代碼代碼如下:
package main
import "fmt"
func fibonacci(c, quit chan int) {
x, y := 1, 1
for {
select {
case c - x:
x, y = y, x + y
case -quit:
fmt.Println("quit")
return
}
}
}
func main() {
c := make(chan int)
quit := make(chan int)
go func() {
for i := 0; i 10; i++ {
fmt.Println(-c)
}
quit - 0
}()
fibonacci(c, quit)
}
默認選擇
當 select 中的其他條件分支都沒有準備好的時候,default 分支會被執(zhí)行。
為了非阻塞的發(fā)送或者接收,可使用 default 分支:
select {
case i := -c:
// use i
default:
// receiving from c would block
}
復制代碼代碼如下:
package main
import (
"fmt"
"time"
)
func main() {
tick := time.Tick(1e8)
boom := time.After(5e8)
for {
select {
case -tick:
fmt.Println("tick.")
case -boom:
fmt.Println("BOOM!")
return
default:
fmt.Println(" .")
time.Sleep(5e7)
}
}
}
Go里面提供了一個關鍵字select,通過select可以監(jiān)聽channel上的數(shù)據(jù)流動。
select的用法與switch語言非常類似,由select開始一個新的選擇塊,每個選擇條件由case語句來描述。
與switch語句相比, select有比較多的限制,其中最大的一條限制就是每個case語句里必須是一個IO操作,大致的結構如下:
在一個select語句中,Go語言會按順序從頭至尾評估每一個發(fā)送和接收的語句。
如果其中的任意一語句可以繼續(xù)執(zhí)行(即沒有被阻塞),那么就從那些可以執(zhí)行的語句中任意選擇一條來使用。
如果沒有任意一條語句可以執(zhí)行(即所有的通道都被阻塞),那么有兩種可能的情況:
如果給出了default語句,那么就會執(zhí)行default語句,同時程序的執(zhí)行會從select語句后的語句中恢復。
如果沒有default語句,那么select語句將被阻塞,直到至少有一個通信可以進行下去
有時候會出現(xiàn)goroutine阻塞的情況,那么我們如何避免整個程序進入阻塞的情況呢?我們可以利用select來設置超時,通過如下的方式實現(xiàn):
select總結:
作用: 用來監(jiān)聽 channel 上的數(shù)據(jù)流動方向。 讀?寫?
select實現(xiàn)fibonacci數(shù)列:
go語言中的if語句和其他語言中的類似,都是根據(jù)給定的條件表達式運算結果來,判斷執(zhí)行流程。
注意:在go語言中 布爾表達式不用使用括號。
根據(jù)布爾值flag判斷
程序運行結果
初始變量可以聲明在布爾表達式里面,注意它的作用域
程序運行結果
注意:不能使用0或非0表示真假
go語言if語句使用提示:
go語言中的if else語句可以根據(jù)給定條件二選一。
比較兩個數(shù)的大小
運行結果
判斷一個數(shù)是奇數(shù)還是偶數(shù)
運行結果
判斷一個人是否成年
運行結果
特殊寫法,在if前面添加執(zhí)行語句
運行結果
go語言if語句使用提示:
go語言if語句可以進行多重嵌套使用,進行多重判斷。
根據(jù)分數(shù)判斷等級
運行結果
同樣也可以寫成這樣
運行結果
輸入星期幾的第一個字母來判斷一下是星期幾,如果第一個字母一樣,則繼續(xù)判斷第二個字母
運行結果
go語言if語句可以嵌套多級進行判斷。
判斷三個數(shù)的大小
運行結果
判斷男生還是女生,還有是否成年
運行結果
網站題目:go語言怎么選擇語句,go語言適合做什么
網頁URL:http://chinadenli.net/article38/dsgeipp.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站策劃、商城網站、網站維護、靜態(tài)網站、網站營銷、服務器托管
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)