Skip to main content

select

Macro select 

Source
macro_rules! select {
    ( recv($r:expr) -> $v:ident => $b:block $(,)? ) => { ... };
    ( recv($r:expr) -> $v:ident => $b:block $(,)? default => $d:block $(,)? ) => { ... };
    ( recv($r1:expr) -> $v1:ident => $b1:block $(,)?
      recv($r2:expr) -> $v2:ident => $b2:block $(,)? ) => { ... };
    ( recv($r1:expr) -> $v1:ident => $b1:block $(,)?
      recv($r2:expr) -> $v2:ident => $b2:block $(,)?
      default => $d:block $(,)? ) => { ... };
    ( recv($r1:expr) -> $v1:ident => $b1:block $(,)?
      recv($r2:expr) -> $v2:ident => $b2:block $(,)?
      recv($r3:expr) -> $v3:ident => $b3:block $(,)? ) => { ... };
    ( recv($r1:expr) -> $v1:ident => $b1:block $(,)?
      recv($r2:expr) -> $v2:ident => $b2:block $(,)?
      recv($r3:expr) -> $v3:ident => $b3:block $(,)?
      default => $d:block $(,)? ) => { ... };
    ( recv($r1:expr) -> $v1:ident => $b1:block $(,)?
      recv($r2:expr) -> $v2:ident => $b2:block $(,)?
      recv($r3:expr) -> $v3:ident => $b3:block $(,)?
      recv($r4:expr) -> $v4:ident => $b4:block $(,)? ) => { ... };
    ( recv($r1:expr) -> $v1:ident => $b1:block $(,)?
      recv($r2:expr) -> $v2:ident => $b2:block $(,)?
      recv($r3:expr) -> $v3:ident => $b3:block $(,)?
      recv($r4:expr) -> $v4:ident => $b4:block $(,)?
      default => $d:block $(,)? ) => { ... };
    ( send($tx:expr, $sv:expr) => $sb:block $(,)? default => $d:block $(,)? ) => { ... };
    ( recv($r1:expr) -> $v1:ident => $rb:block $(,)?
      send($tx:expr, $sv:expr)    => $sb:block $(,)? ) => { ... };
    ( recv($r1:expr) -> $v1:ident => $rb:block $(,)?
      send($tx:expr, $sv:expr)    => $sb:block $(,)?
      default                     => $d:block $(,)? ) => { ... };
    ( recv($r1:expr) -> $v1:ident => $b1:block $(,)?
      recv($r2:expr) -> $v2:ident => $b2:block $(,)?
      send($tx:expr, $sv:expr)    => $sb:block $(,)? ) => { ... };
    ( recv($r1:expr) -> $v1:ident => $b1:block $(,)?
      recv($r2:expr) -> $v2:ident => $b2:block $(,)?
      send($tx:expr, $sv:expr)    => $sb:block $(,)?
      default                     => $d:block $(,)? ) => { ... };
    ( recv($r1:expr) -> $v1:ident => $b1:block $(,)?
      recv($r2:expr) -> $v2:ident => $b2:block $(,)?
      recv($r3:expr) -> $v3:ident => $b3:block $(,)?
      send($tx:expr, $sv:expr)    => $sb:block $(,)? ) => { ... };
    ( recv($r1:expr) -> $v1:ident => $rb:block $(,)?
      send($tx1:expr, $sv1:expr)  => $sb1:block $(,)?
      send($tx2:expr, $sv2:expr)  => $sb2:block $(,)? ) => { ... };
    ( recv($r1:expr) -> $v1:ident => $rb:block $(,)?
      send($tx1:expr, $sv1:expr)  => $sb1:block $(,)?
      send($tx2:expr, $sv2:expr)  => $sb2:block $(,)?
      default                     => $d:block $(,)? ) => { ... };
}
Expand description

Multiplex channel operations.

See [module-level documentation][crate::go_macro] for full syntax and semantics.

ยงExample โ€” nonblocking recv with default

use go_lib::chan::chan;
go_lib::run(|| {
    let (tx, rx) = chan::<i32>(1);
    tx.send(42);
    go_lib::select! {
        recv(rx) -> v => {
            println!("received {:?}", v);
        }
        default => {
            println!("nothing ready");
        }
    }
});