par Léo 'Soulou' Unbekandt
  $ GOOS=windows GOARCH=386 go build main.go
  $ GOOS=darwin GOARCH=amd64 go build main.go
  $ GOOS=freebds GOARCH=arm GOARM=5 go build main.go
            
          
  package main ; import "fmt" ; func main() { 
  fmt.Println("← Hello World ☺ →"); }
            
            $ go fmt main.go
            
  package main
  import "fmt"
  func main() { 
    fmt.Println("← Hello World ☺ →")
  }
            
            
              UTF-8 !
            
  i := 0
  b := true
             ==
            
  var i int = 0
  var b bool = true
            
          
  func hello(name string) string {
    return fmt.Sprintf("Hello %s !\n", name)
  }
  func split(str string) (string, string) {
    return str[:len(str)/2], str[len(str)/2:]
  }
  incr := func(n int) int {
    return n+1
  }
            
            
              Les string sont IMMUTABLES !
            
  if i == 0 {
    os.Exit(0)
  } else {
    fmt.Printf("NOT ZERO !\n")
  }
  for i := 0 ; i < N ; i++ { ..
  for i < N { ..
  for { .. 
            
          
  var array [10]int 
  slice := array[:2]
  emptySlide := make([]int, 10)  
  strArray := []string{"Salut", "les", "Gophers"}
  for k,v := range strArray {
    fmt.Printf("Index : %d, Value : %s\n", k, v)
  }
            
          
  data := map[string]string {
    "key1" : "value1",
    "key2" : "value2"
  }
  for k,v := range data { // ...
            
          Une structure en packages
  // Fichier base.go
  package base
  func Inc(n int) int {
    return n + 1
  }
  func dec(n int) int {
    return n - 1
  }
            
          Une structure en packages
  // Fichier main.go
  package main
  import (
    "base"
    "fmt"
  )
  func main() {
    fmt.Printf("Inc(1) = %d\n", base.Inc(1))
    // ERREUR
    fmt.Printf("dec(1) = %d\n", base.dec(1))
  }
            
          
  import (
    "github.com/pmylund/go-cache"
    "launchpad.net/gnuflag"
    "bitbucket.org/taruti/ssh.go"
    "code.google.com/p/go-avltree"
  )
            
            
  $ go get [import]
            
          
  f, err := os.Open(name)
  if err != nil {
    // Traitement err
  }
            
          
  f, err := os.Open(name)
  if err != nil {
    // Traitement err
  }
  defer f.Close()
  // Utilisation du file handle
            
          
  func AddN(n int) func(int) int {
    return func(m int) {
      return m + n
    }
  }
  add10 := AddN(10)
  fmt.Print(add10(1))
            
          
  type Point struct {
    x, y float64
  }
  func (this *Point) dist(that *Point) float64 {
    math.Sqrt(
      math.Pow(that.x - this.x, 2) + 
      math.Pow(that.y - this.y, 2))
  }
  p1 := &Point{1.0,2.0}
  p2 := &Point{2.0,3.0}
  fmt.Println("%f\n", p1.dist(p2))
            
          
  type Animal interface {
    Bruit(uint16) error
  } 
  type Chien struct {
    Animal
  }
  type Poisson struct {
    Animal
  }
          
          
  func (c Chien) Bruit(n uint16) error {
    for i := 0 ; uint16(i) < n ; i++ {
      fmt.Println("Waf")
    }
    return nil
  } 
  func (p Poisson) Bruit(n uint16) error {
    return fmt.Errorf("Je ne fais pas de bruit je suis un poisson\n")
  }
            
          
  func doSomething(n int) {
    time.Sleep(n * time.Millisecond)
    fmt.Printf("%d ms\n", n)
  }
  func main() {
    go doSomething(200)
    go doSomething(400)
    doSomething(600)
  }
            
          
  func waitRead(ch chan bool) {
    time.Sleep(2 * time.Second)
    ch <- true
  }
  func main() {
    ch := make(chan bool, 1)
    go waitReady(ch)
    <- ch
    fmt.Printf("We are ready\n")
  }
            
            func idGenerator() chan int {
    ids := make(chan int)
    go func() {
      id := 0
      for {
        ch <- id
        id++
      }
    }()
    return ids
  }
          
          
  func main() {
    ids := idGenerator()
    id1 := <-ids
    id2 := <-ids
  }
          
          
  timeout := time.After(2 * time.Seconds)
  ch := make(chan Result)
  go func() {
    ch <- doSomething() 
  }()
  select {
    case r := <-ch:
      // On a un résultat en moins d'1 sec
    case <-timeout:
      // Timeout, on traite le cas
  }
            
          
  resp, err := http.Get("http://example.com/")
  resp, err := http.Post("http://example.com/upload", 
    "image/jpeg", &buf)
  resp, err := http.PostForm("http://example.com/form",
    url.Values{"key": {"Value"}, "id": {"123"}})
            
          
  s := &http.Server{
    Addr:           ":8080",
    Handler:        myHandler,
    ReadTimeout:    10 * time.Second,
    WriteTimeout:   10 * time.Second,
    MaxHeaderBytes: 1 << 20,
  }
            
            
  func myHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, %q", 
      html.EscapeString(r.URL.Path))
  }
            
          
  package main
  import "fmt"
  // #include <stdio.h>
  import "C"
  func main() {
    n, err := C.getchar()
    fmt.Print(n, err)
  }
            
          
  $ wget 'http://goo.gl/qa4FT'
  $ tar xvf go1.1.linux-amd64.tar.gz
  $ echo "export GOOS=linux" > > ~/.zshrc
  $ echo "export GOARCH=amd64" > > ~/.zshrc
  $ echo "export GOROOT=`pwd`/go" > > ~/.zshrc
  $ echo "export GOPATH=~/Workspace/go" > > ~/.zshrc
  $ echo "export PATH=$PATH:$GOROOT/bin:$GOPATH/bin" > > ~/.zshrc
            
          
  $GOPATH/
    bin/
    pkg/
      linux_amd64/
        projet/
          package/
            *.a
    src/
      project/
        package/
          *.go
          
          
  $ go get -u github.com/nsf/gocode
  $ $GOPATH/src/github.com/nsf/gocode/vim/update_pathogen.sh
            
          Léo UnbekandtÉtudiant à l'ENSIIE Strasbourg