チャンネルという新しい同期、非同期通信の仕組みや関数の複数値返し、
待ってたものがやっときたという感じです。
ずんWiki - golang/逆引き/goroutineを終了するには
goで遊んでいてわからなくなったポイントがありました。
go func()で簡単に走らせることができるgoのスレッド、goroutine。
自分のスレッドを強制的に終わらせるために用意された、グローバルな関数がありました。
runtime.Goexit()
上記を参照しました。
下記のようなときに使えます。
例:チャンネルを使ってgoroutineが終わるのを待ちますが、
強制終了されちゃうとチャンネル受信ができないので終われません。
ひたすら待ち続けてプロセスが死んじゃいます、という例:
package main
import (
"fmt";
"runtime"
)
var ch= make(chan int, 1);
func main() {
go func() {
func() {
fmt.Printf("Stop goroutine1\n");
runtime.Goexit();
}();
ch <- 1;
}();
<-ch;
}
出力:エラー吐いてプロセス死亡・・・
package main
import (
"fmt";
// "runtime"
)
var ch= make(chan int, 1);
func main() {
go func() {
func() {
fmt.Printf("Stop goroutine1\n");
// runtime.Goexit();
}();
ch <- 1;
}();
<-ch;
}
出力:Stop goroutine1