Go語言學習(十)Go 語言結構體 Go 併發

2021-10-01 15:00:16 字數 2374 閱讀 7963

go 語言中陣列可以儲存同一型別的資料,但在結構體中我們可以為不同項定義不同的資料型別。

結構體是由一系列具有相同型別或不同型別的資料構成的資料集合。

1.定義結構體

例項如下:

一直出現該報錯的 原因是因為其中語句用的是單引號

2.訪問結構體成員

結構體型別變數使用 struct 關鍵字定義,例項如下:

3.結構體作為函式引數

可以像其他資料型別一樣將結構體型別作為引數傳遞給函式。

4.結構體指標

結構體定義需要使用 type 和 struct 語句。struct 語句定義乙個新的資料型別,結構體中有乙個或多個成員。

go 語言支援併發,我們只需要通過 go 關鍵字來開啟 goroutine 即可。

goroutine 是輕量級執行緒,goroutine 的排程是由 golang 執行時進行管理的。

1.例項**一:

go 允許使用 go 語句開啟乙個新的執行期執行緒, 即 goroutine,以乙個不同的、新建立的 goroutine 來執行乙個函式。 同乙個程式中的所有 goroutine 共享同乙個位址空間。

2.通道(channel)

通道(channel)是用來傳遞資料的乙個資料結構。

通道可用於兩個 goroutine 之間通過傳遞乙個指定型別的值來同步執行和通訊。操作符

ch 

v :=

宣告乙個通道很簡單,我們使用chan關鍵字即可,通道在使用前必須先建立:

ch := make(chan int)
例項**2:以下例項通過兩個 goroutine 來計算數字之和,在 goroutine 完成計算後,它會計算兩個結果的和:

補充:len()/2是向下取整

3.通道緩衝區

通道可以設定緩衝區,通過 make 的第二個引數指定緩衝區大小:

ch := make(chan int, 100)
帶緩衝區的通道允許傳送端的資料傳送和接收端的資料獲取處於非同步狀態,**就是說傳送端傳送的資料可以放在緩衝區裡面,可以等待接收端去獲取資料,**而不是立刻需要接收端去獲取資料。

不過由於緩衝區的大小是有限的,**所以還是必須有接收端來接收資料的,**否則緩衝區一滿,資料傳送端就無法再傳送資料了。

**注意:**如果通道不帶緩衝,傳送方會阻塞直到接收方從通道中接收了值。如果通道帶緩衝,傳送方則會阻塞直到傳送的值被拷貝到緩衝區內;如果緩衝區已滿,則意味著需要等待直到某個接收方獲取到乙個值。接收方在有值可以接收之前會一直阻塞。

例項**3:

注意:此時傳送乙個資料和傳送三個資料都會出現報錯

4.go 遍歷通道與關閉通道

go 通過 range 關鍵字來實現遍歷讀取到的資料,類似於與陣列或切片。格式如下:

v, ok :=

如果通道接收不到資料後 ok 就為 false,這時通道就可以使用 close() 函式來關閉。

go語言學習筆記 結構體

go語言中,結構體的宣告非常類似c語言,具體定義方法如下 初始化方法有三種 package main import fmt 定義乙個結構體型別 type student struct func main fmt.println s1 s1 2.部分成員初始化,未初始化的變數被賦值為0 s2 stud...

go語言學習12(結構體)

格式 type 結構體名稱 struct 結構體如果需要匯出到其他包用,則名字首字母需要大寫 結構體中成員如果需要在其他包中引用,也需要首字母大寫。例如 type teststruct struct 上面結構體名 teststruct 可以被其他包引用 同理其成員 fieldout 也可以被其他包引...

Go語言學習之結構體

介紹 go語言中的基礎資料型別可以表示一些事務的基本屬性,但是我們想表達乙個事務的全部或部分屬性時 比如乙個人,她的姓名 年齡 愛好等屬性 就無法滿足需求了,go語言為我們提供了一種自定義資料型別,可以封裝多個基本資料型別,叫結構體,也就是struct 結構體相當於python裡給類傳的引數,pyt...