タイムアウト それは操作を実行するのにかかる時間の点で外部リソースへの接続、または他のプログラムのためには非常に重要です。チャンネルのおかげと select
移動で達成操作のタイムアウトはシンプルかつエレガントです。
例:
メインパッケージ のインポート 「FMT 」 インポート 「時間」 FUNCメイン(){ c1は: = メイク(チャンString)を 、我々は外部コールを実行した場合、この例では、//を、そして2 その実行後路C1秒を通じてバック結果。 FUNCゴー(){ time.sleep(time.Second * 2 ) C1 < - " ワン" }() //この選択操作のタイムアウトを使用して実装されています。RES:= < - Time.After 1待ちタイムアウト< - 、結果を待つc1は第二の送信後の値。 //以降、デフォルトのハンドラを選択する操作が許容1超える場合は、最初の操作を受信する準備ができている第二に、それはケースをタイムアウトします。 {SELECT ケースRESを: = < - C1: fmt.Println(RES) ケース < - time.After(time.Second * 1 ): fmt.Println(" タイムアウト1 " ) } C2: = 作る(チャン列) 行くFUNC(){ time.Sleep(time.Second * 2 ) C2 < - " 2 " }() {を選択し た場合RESを: = < - C2: fmt.Println(RES) の場合 < - time.After(time.Second * 3 ): fmt.Println(" timeount 2 " ) } }
結果:
$実行example.goを行きます
タイムアウト1
2
ショーの実行中の操作のうち、プログラム、初めてを実行し、正常に受信。
この使用 select
タイムアウトモードを、結果がチャンネルを渡す必要があります。他の重要な機能は、チャネルおよび移動に基づいているので、これは、一般的なケースのための良い方法ですselect
さん。