select утверждения (select statements)
SelectStmt = "select" "{" { CommClause } "}" .
CommClause = CommCase ":" StatementList .
CommCase = "case" ( SendStmt | RecvStmt ) | "default" .
RecvStmt = [ ExpressionList "=" | IdentifierList ":=" ] RecvExpr .
RecvExpr = Expression .var a []int
var c, c1, c2, c3, c4 chan int
var i1, i2 int
select {
case i1 = <-c1:
print("received ", i1, " from c1\n")
case c2 <- i2:
print("sent ", i2, " to c2\n")
case i3, ok := (<-c3): // то же самое что и: i3, ok := <-c3
if ok {
print("received ", i3, " from c3\n")
} else {
print("c3 is closed\n")
}
case a[f()] = <-c4:
// то же самое что и:
// case t := <-c4
// a[f()] = t
default:
print("no communication\n")
}
for { // отправляет случайную последовательность битов в c
select {
case c <- 0: // примечание: нет утверждения, нет fallthrough ("провала" в следующий случай), нет сворачивания случаев
case c <- 1:
}
}
select {} // блокируется навсегдаLast updated