User Tools

Site Tools


cs_lang:go

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
cs_lang:go [2012/04/21 09:00] cedriccs_lang:go [2012/04/30 09:24] cedric
Line 7: Line 7:
 ===== Sum the elements of a list ===== ===== Sum the elements of a list =====
  
-<code c>+<code go>
 package main package main
  
Line 23: Line 23:
     a := []int{7, 2, 8, -9, 4, 0}     a := []int{7, 2, 8, -9, 4, 0}
  
-        c := make(chan int)+    c := make(chan int)
     go sum(a[:len(a)/2], c)     go sum(a[:len(a)/2], c)
     go sum(a[len(a)/2:], c)     go sum(a[len(a)/2:], c)
-        x, y := <-c, <-c  // receive from c+    x, y := <-c, <-c
  
     fmt.Println(x, y, x + y)     fmt.Println(x, y, x + y)
 } }
-</go>+</code>
  
 +
 +===== Producer-consumer problem =====
 +<code go>
 +package main
 + 
 +import ("fmt")
 + 
 +var done = make(chan bool)
 +var cake = make(chan int)
 + 
 +func produce (firstname string) {
 +    for i := 0; i < 10; i++ {
 +        fmt.Printf("%s make cake %d\n", firstname, i)
 +        cake <- i
 +    }
 +    done <- true
 +}
 + 
 +func consume (firstname string) {
 +    for {
 +      cake_number := <-cake
 +      fmt.Printf("%s eat cake %d\n", firstname, cake_number)
 +   }
 +}
 + 
 +func main () {
 +   go produce("Alice")
 +   go consume("Bob")
 +   go consume("Maxime")
 +   <- done
 +}
 +</code>
 +
 +===== Fork bomb =====
 +<code go>
 +package main
 +
 +import "fmt"
 +
 +func main() {
 +    c := make(chan bool)
 +    go func() {
 +        count := 0
 +        for <- c {
 +            count++
 +            fmt.Println(count)
 +        }
 +    }()
 +    bomb(c)
 +}
 +
 +func bomb(tick chan bool) {
 +    for {
 +        tick <- true
 +        go bomb(tick)
 +    }
 +}
 +</code>
  
  
cs_lang/go.txt · Last modified: 2014/04/18 23:19 by cedric