2012-09-17 18 views
8

私はちょうど継続し、何もしないようにしたいselect文のデフォルトの原因を持っていますが、行を空白のままにすることはselect文のdefaultケースがに意図されてGo - Pythonの "pass"に相当するものは何ですか?

 select { 
     case quit_status := <-quit: 
      if quit_status == true { 
       fmt.Printf("********************* GOROUTINE [%d] Received QUIT MSG\n", id) 
       return 
      } 
     default: 
      fmt.Printf("GOROUTINE [%d] step: %d, NO QUIT MSG\n", id, i) 
     } 
+0

あなたは完全にデフォルトの文を削除しようとしたことがありますか? –

+0

あなたは 'default'節を完全に省略できませんか? – verdesmarald

答えて

9

起きてから文の中で何かを停止しますチャネルの読み取りと書き込みにノンブロッキングI/Oを提供します。 defaultケース内のコードは、いずれのケースのチャネルも読み取り/書き込みの準備ができていないときに実行されます。

あなたのケースでは、終了チャネルに何も言わないとdefaultブロックが実行されます。 デフォルトのケースを削除するだけで、quit_status := <-quitの値がquitで利用可能になるまでブロックされます。これは、おそらくこのインスタンスでの後の処理です。

すぐselect文の後にコードの実行を継続する場合は、別のゴルーチンにこのselect文を実行する必要があります。

go func() { 
    select { 
    case quit_status := <-quit: 
     ... 

    } 
}() 

// Execution continues here immediately. 
+4

別のゴルーチンで実行する理由はありません。 'default:'を置くだけで、次の行にselect文を閉じることができます。 "合格"のゴーイングバージョンは何も置かないことです。 –

関連する問題