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