// 同期
func FuncSync() (string, error) {
return "ok", nil
}
// 非同期
func FuncAsync() (<-chan string, <-chan error) {
// バッファ1のチャネルにすることが重要
// 呼び出し元がチャネル受信しない場合でもブロックしないように
ret_ch := make(chan string, 1)
err_ch := make(chan error, 1)
go func() {
ret, err := FuncSync()
ret_ch<- ret
err_ch<- err
}()
return ret_ch, err_ch
}
func main() {
// 非同期関数を呼び出してチャネルを受け取る
ret_ch, err_ch := FuncAsync()
// この間に他の処理を行う
// 非同期関数の結果を待ち合わせるためチャネル受信
ret := <-ret_ch
err := <-err_ch
fmt.Printf("ret: %v\n", ret)
fmt.Printf("err: %v\n", err)
}
0 件のコメント:
コメントを投稿