iT邦幫忙

2021 iThome 鐵人賽

DAY 16
0
自我挑戰組

30 天學 Golang?Go 啦哪次不 Go系列 第 16

Day16# Channel

今天要介紹的是 channel,那麼我們就進入正題吧 ─=≡Σ(((っ゚∀゚)っ

channel

昨天在介紹 goroutine 有提到,當 main goroutine 結束時,其他的 goroutine 也會跟著結束,要怎麼讓 main goroutine 知道其他 goroutine 的狀況,就能夠透過 channel 來進行不同 goroutine 之間的交流以及資訊傳遞。

  • channel 是一種資料型態
  • channel 是一條通道,可以接收資訊也可以傳送資訊
  • channel 可以確保在各個 goroutine 間,在完成資料收送後的動作後才會繼續往下處理,這樣可以在 goroutine 間同步的進行資料處理

如何宣告

var ch chan int

// 或是

ch := make(chan int)

如何取出或塞入資料

channel 具有方向性,因此使用 <- 時需要特別注意箭頭方向。

ch <- v // 把 v 的值塞入 channel

v <- ch // 從 ch 把東西取出,並塞入 v

Buffered Channel

可以限制定義的 Channel 內的參數數量:

// variable := make(chan Type, Number)

package main

import "fmt"

func main() {
	ch := make(chan int, 2)
	ch <- 1
	ch <- 2
	fmt.Println(<-ch)
	fmt.Println(<-ch)
}

close

當沒有任何值可以被傳進 channel 時,可以透過 close 來關閉 channel。

close(ch)

結尾

channel 基本語法的介紹就到這邊結束
如果有任何問題歡迎與我告知 :)


上一篇
Day15# Goroutines
下一篇
Day17# panic & recover
系列文
30 天學 Golang?Go 啦哪次不 Go20

尚未有邦友留言

立即登入留言