go語言select嵌套 go語言select機制

go語言select的作用

Go里面提供了一個關鍵字select,通過select可以監(jiān)聽channel上的數(shù)據流動。

為鼎城等地區(qū)用戶提供了全套網頁設計制作服務,及鼎城網站建設行業(yè)解決方案。主營業(yè)務為成都網站設計、成都網站制作、外貿網站建設、鼎城網站設計,以傳統(tǒng)方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

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ù)據流動方向。 讀?寫?

select實現(xiàn)fibonacci數(shù)列:

Golang入門到項目實戰(zhàn) | golang嵌套結構體

go語言沒有面向對象編程思想,也沒有繼承關系,但是可以通過結構體嵌套來實現(xiàn)這種效果。

下面通過實例演示如何實現(xiàn)結構體嵌套,假如有一個人Person結構體,這個人還養(yǎng)了一個寵物Dog結構體

下面我們來看一下:

Dog結構體

Person結構體

訪問它們

運行結果

golang中級進階(二):結構體

目錄

一、結構體詳解

1. 結構體定義

2. 實例化結構體的7種方法

二、結構體方法

1. 結構體的方法定義

2. 結構體內自定義方法的引用

3. 任意類型添加方法

三、嵌套、繼承

1. 匿名結構體

2. 結構體中可以定義任意類型的字段

3. 結構體嵌套結構體

4. 結構體嵌套匿名結構體

5. 結構體嵌套多個匿名結構體

6. 結構體繼承

四、結構體和JSON相互轉換

1. 結構體轉化成json

2. json轉化成結構體

3. 結構體標簽 tag

4. 嵌套結構體和json的序列化反序列化

Golang 中沒有“類”的概念,Golang 中的結構體和其他語言中的類有點相似。和其他面向對 象語言中的類相比,Golang 中的結構體具有更高的擴展性和靈活性。

Golang 中的基礎數(shù)據類型可以表示一些事物的基本屬性,但是當我們想表達一個事物的全 部或部分屬性時,這時候再用單一的基本數(shù)據類型就無法滿足需求了,Golang 提供了一種 自定義數(shù)據類型,可以封裝多個基本數(shù)據類型,這種數(shù)據類型叫結構體,英文名稱 struct。 也就是我們可以通過 struct 來定義自己的類型了。

使用 type 和 struct 關鍵字來定義結構體,具體代碼格式如下:

type 類型名 struct {

字段名 字段類型

字段名 字段類型 …

}

其中:

? 類型名:表示自定義結構體的名稱,在同一個包內不能重復。

? 字段名:表示結構體字段名。結構體中的字段名必須唯一。

? 字段類型:表示結構體字段的具體類型。

在 go 語言中,沒有類的概念但是可以給類型(結構體,自定義類型)定義方法。所謂方法 就是定義了接收者的函數(shù)。接收者的概念就類似于其他語言中的 this 或者 self。

方法的定義格式如下:

func (接收者變量 接收者類型) 方法名(參數(shù)列表) (返回參數(shù)) {

函數(shù)體

}

注意:想改變結構體內的值,必須先變成指針。

在 Go 語言中,接收者的類型可以是任何類型,不僅僅是結構體,任何類型都可以擁有方法。 舉個例子,我們基于內置的 int 類型使用 type 關鍵字可以定義新的自定義類型,然后為我們 的自定義類型添加方法。

注意:匿名結構體中不允許出現(xiàn)多個重復的類型

注意:如果結構體里面有私有屬性也就是小寫定義的字段,則不會被json使用

Go語言基礎語法(一)

本文介紹一些Go語言的基礎語法。

先來看一個簡單的go語言代碼:

go語言的注釋方法:

代碼執(zhí)行結果:

下面來進一步介紹go的基礎語法。

go語言中格式化輸出可以使用 fmt 和 log 這兩個標準庫,

常用方法:

示例代碼:

執(zhí)行結果:

更多格式化方法可以訪問中的fmt包。

log包實現(xiàn)了簡單的日志服務,也提供了一些格式化輸出的方法。

執(zhí)行結果:

下面來介紹一下go的數(shù)據類型

下表列出了go語言的數(shù)據類型:

int、float、bool、string、數(shù)組和struct屬于值類型,這些類型的變量直接指向存在內存中的值;slice、map、chan、pointer等是引用類型,存儲的是一個地址,這個地址存儲最終的值。

常量是在程序編譯時就確定下來的值,程序運行時無法改變。

執(zhí)行結果:

執(zhí)行結果:

Go 語言的運算符主要包括算術運算符、關系運算符、邏輯運算符、位運算符、賦值運算符以及指針相關運算符。

算術運算符:

關系運算符:

邏輯運算符:

位運算符:

賦值運算符:

指針相關運算符:

下面介紹一下go語言中的if語句和switch語句。另外還有一種控制語句叫select語句,通常與通道聯(lián)用,這里不做介紹。

if語法格式如下:

if ... else :

else if:

示例代碼:

語法格式:

另外,添加 fallthrough 會強制執(zhí)行后面的 case 語句,不管下一條case語句是否為true。

示例代碼:

執(zhí)行結果:

下面介紹幾種循環(huán)語句:

執(zhí)行結果:

執(zhí)行結果:

也可以通過標記退出循環(huán):

--THE END--

Go語言之結構體嵌套

在type Student2 struct結構體中,注意book參數(shù)引用的是地址,方便修改數(shù)據

當前名稱:go語言select嵌套 go語言select機制
當前路徑:http://muchs.cn/article38/docdppp.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供手機網站建設、網站建設、網站導航、網站排名、虛擬主機、建站公司

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網站網頁設計