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