跟著貓哥學Golang 16 Channel

2021-07-23 06:20:45 字數 1259 閱讀 9657



goroutine和channel是golang之所以被稱之為「天生併發」的兩個核心原因。

channel是goroutine之間進行通訊的一種方式。與unix中的管道功能非常類似。

貓哥說:其實就是資料結構裡面的佇列嘛~ 先進先出~

channel宣告:

channeltype = ( "chan" | "chan" "<-" | "<-" "chan" ) elementtype

var ch chan int  #ch只能傳遞int。

舉個栗子:

package main

import "fmt"

func justequal(a int, c chan int)

func main()

首先,定義乙個channel,整型;

其次,用goroutine開個執行緒給channel塞進個內容;

然後,列印出來;(其實直接 fmt.println( <-c, <-c)也是可以的,只是看起來總覺得**不對勁...)

最後,因為定義是 make(chan int),所以必須走goroutine方式給賦值。後面會說為什麼。

***************=華麗麗的分割線***************====

上面例子是最簡單粗暴的channel——直腸子,存不住內容。實際上的channel,還是可以有「內涵」的。當然,it行話,這個叫「緩衝」。

重新定義有「內涵」的channel:

ch := make(chan int, 10)
look~ 內涵真的可以有,有10個捏~

這樣一來,操作簡單多了。再來個「栗子」:

package main

import "fmt"

func main()

結果:
100 200 300
是不是很清晰?先進先出。

定義channel時候,不寫快取大小,或者快取數寫成「0」,都表示無快取。

有沒有緩衝的區別,用個生活中收快遞的情況對比一下。

快遞到了~

1)快遞員一直等你,你不來他不走(當然你不簽收,他不能繼續下一單),這個是沒快取的;

2)快遞員不管你在不在,把快遞包裹放在傳達室,人就走了,忙下一單去了,這個是有快取。

跟著貓哥學Golang 7 Map

大多數現代化的程式語言都有個類似map的概念,大意就是對映,go語言也不能例外。1.golang裡,map對映鍵到值,以貓哥的粗淺認識,map的作用類似於雜湊表或者python裡的字典,只不過比後兩者用得更廣泛。map在golang裡是一種資料型別,與golang的結構體類似,map必須先宣告 鍵值...

跟著貓哥學Golang 6 結構體

非常類似於c語言,golang中的乙個結構體 struct 就是乙個欄位的集合。1.golang定義結構體很簡單 type struct func main var jerry person jerry.name jerry jerry.age 21 jerry.gender male fmt.pr...

跟著貓哥學Golang 12 結構體的方法

golang 沒有類,只有結構體。不過golang可以在結構體型別上定義方法,其實就是配合結構體的函式。方法和之前講過的函式是有些小區別的 對應的結構體資訊 也叫 方法接受者 出現在方法定義中。貓哥語 有golang特色的方法。1.結構體方法的定義格式 func var struct name fu...