iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 23
1

今天我們來聊一下「Channel」,中文可以翻譯為「通道」。在實作上通常與Goroutine一起,作為彼此之間的通信機制,可以收(Receive)發(Send)資料。

每個Channel可以設定一種類別,比方說一個發送整數的通道我們可定義為chan int。在使用時我們使用內建的make方法,範例如下:

ch := make(chan int)

Send

宣告以後,當我們要傳遞資料進去很簡單:

ch <- 5

這樣就可以了!

Receive

在取用的時候,則是將箭頭指向變數:

x := <- ch

Close

當通道被關閉後,資料就只出不進(還蠻直觀的),只能讀取不能寫入:

close(ch)

這樣講可能有點模糊,我們來看一個簡單的例子:

package main

import (
	"fmt"
)

func main() {
	c := make(chan int)

	// 使用goroutine
	go func() {
		for i := 0; i < 10; i++ {
			c <- i
		}
		close(c)
	}()

	for n := range c {
		fmt.Println(n)
	}
}

基本上可以把channel當作在不同Goroutine之間傳遞的變數,所以給值之後可以取值。執行後我們會得到:

0
1
2
3
4
5
6
7
8
9

內部的資料是先進先出,0是第一個被存取進去的值,也是第一個取出來的。

Reference


上一篇
Example 示例函數
下一篇
Pointer 指標
系列文
啥物碗Golang? 30天就Go30

尚未有邦友留言

立即登入留言