golang channel這種方式的優點是透過提供原子的通訊原語,避免了競態情形(race condition)下複雜的鎖定機制。
channel
channel 是可以讓一個 goroutine 發送特定值到另一個 gouroutine 的通訊機制。 (建議學習:go)
#可以理解為某種類型的值傳遞的導管,而這種在 channel 中傳遞的類型成為 channle 的 element type 元素類型。
一個使用make創建的,對資料結構的引用,當channel 作為參數使用時,實際上是傳引用調用
channel 的零值: nil
channel 可以看成一個FIFO 佇列,對FIFO 佇列的讀寫都是原子的操作,不需要加鎖。 對channel 的操作行為結果總結如下:
讀取一個已關閉的channel 時,總是能讀取到對應類型的零值,為了和讀取非空未關閉channel 的行為區別,可以使用兩個接收值:
// ok is false when ch is closedv, ok := <-ch
golang 中大部分類型都是值類型(只有slice / channel / map 是引用類型),讀/寫類型是值類型的channel 時,如果元素size 比較大時,應該使用指標代替,避免頻繁的記憶體拷貝開銷。
以上是golang channel有什麼好處的詳細內容。更多資訊請關注PHP中文網其他相關文章!