source: doc/papers/concurrency/examples/channels.go @ a659b31

ADTast-experimental
Last change on this file since a659b31 was 2aab69b, checked in by Peter A. Buhr <pabuhr@…>, 5 years ago

files added to concurrency paper

  • Property mode set to 100644
File size: 786 bytes
RevLine 
[2aab69b]1package main
2import "fmt"
3func main() {
4        type Msg struct{ i, j int }
5
6        ch1 := make( chan int )
7        ch2 := make( chan float32 )
8        ch3 := make( chan Msg )
9        hand := make( chan string )
10        shake := make( chan string )
11        gortn := func() { // thread starts
12                var i int;  var f float32;  var m Msg
13                L: for {
14                        select { // wait for message
15                          case i = <- ch1: fmt.Println( i )
16                          case f = <- ch2: fmt.Println( f )
17                          case m = <- ch3: fmt.Println( m )
18                          case <- hand: break L // sentinel
19                        }
20                }
21                shake <- "SHAKE" // completion
22        }
23
24        go gortn() // start thread
25        ch1 <- 0 // different messages
26        ch2 <- 2.5
27        ch3 <- Msg{1, 2}
28        hand <- "HAND" // sentinel value
29        <- shake // wait for completion
30}
31
32// Local Variables: //
33// tab-width: 4 //
34// compile-command: "go run channels.go" //
35// End: //
Note: See TracBrowser for help on using the repository browser.