使用 goroutine 的時候,總是會有個疑問?
我該怎麼樣去停止 goroutine。因為 goroutine 不像 C 語言之類,可以獲得對應的 id 之類的。
void doSomeThing(){
...
}int main()
{
pthread_t tid;
pthread_create(&(tid[i]), NULL, &doSomeThing, NULL);
pthread_kill(tid,0)
}
Go 目前用 channel 或 context 的方式來發送取消 (cancelation) 給 goroutine。
Channel
建立一個 channel,讓 goroutine 去監聽事件。當 close channel 後,goroutine 便收到 close 的事件。
Context
現在若是在一個 tree 狀結構的 go-routing。要停止 sub-tree 的 goroutine,使用 channel 的方式就些許不便。
go 在 1.7 版引入 Context。用來傳遞事件給 go-routine。
目前支援 WithCancel, WithDeadline, WithTimeout, or WithValue. 詳細用法請參考 context