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 08:57] cedriccs_lang:go [2012/04/30 09:24] cedric
Line 1: Line 1:
 ====== Learning Go ====== ====== Learning Go ======
   * [[http://tour.golang.org/ | A Tour of Go]].   * [[http://tour.golang.org/ | A Tour of Go]].
 +
 +
 +
 +====== Simple examples ======
 +===== Sum the elements of a list =====
 +
 +<code go>
 +package main
 +
 +import "fmt"
 +
 +func sum(a []int, c chan int) {
 +    sum := 0
 +    for _, v := range a {
 +        sum += v
 +    }
 +    c <- sum  // send sum to c
 +}
 +
 +func main() {
 +    a := []int{7, 2, 8, -9, 4, 0}
 +
 +    c := make(chan int)
 +    go sum(a[:len(a)/2], c)
 +    go sum(a[len(a)/2:], c)
 +    x, y := <-c, <-c
 +
 +    fmt.Println(x, y, x + y)
 +}
 +</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>
 +
  
 ====== Books ====== ====== Books ======
cs_lang/go.txt · Last modified: 2014/04/18 23:19 by cedric