// 同期 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 件のコメント:
コメントを投稿