チャンネルを明示的に空にするにはどうすればいいですか? 質問する

チャンネルを明示的に空にするにはどうすればいいですか? 質問する

簡単に言うと、go チャネルを再作成したりループしたりせずに空にする方法はありますか?

理由: データの送受信に 2 つのチャネルを使用しており、再接続が必要であることを通知するための追加のチャネルがあります。

ここで、トランスポートがリセット/再接続されたら、追加のチャネルを「空」にして、再接続を引き起こす他のリセット要求が残っていないことを確認します。

ベストアンサー1

ループなしでチャネルを空にすることはできません。同時受信がない場合、次の単純なループを使用できます。

for len(ch) > 0 {
  <-ch
}

同時受信者がいる場合は、ループを使用します。

L:
for {
    select {
    case <-c:
    default:
       break L
    }
}

おすすめ記事