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