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 9: Line 9:
 <code go> <code go>
 package main package main
 +
 import "fmt" import "fmt"
- +
 func sum(a []int, c chan int) { func sum(a []int, c chan int) {
     sum := 0     sum := 0
Line 18: Line 19:
     c <- sum  // send sum to c     c <- sum  // send sum to c
 } }
- +
 func main() { func main() {
     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