Permalink
Browse files

2012-09-26 Paris Go

  • Loading branch information...
Bruno Michel
Bruno Michel committed Sep 26, 2012
1 parent 6b81703 commit 3d896266bf0e0bb939dca358c81e240b539889ca
@@ -0,0 +1,25 @@
+!SLIDE
+# Le futur of Go
+
+* Go 1 garantit une stabilité pour quelques années
+* Pour le moment, les efforts se concentrent sur
+ * Corriger les bugs
+ * Améliorer le Garbage Collector
+ * Gagner en performances
+* Voir des projets grandir et retours d'expérience
+* Le travail sur Go 2 n'a pas encore commencé
+
+!SLIDE
+# Conclusion #
+
+* Go n'a pas de fonctionnalité particulièrement sexy
+* Mais c'est un langage agréable
+* Facile à apprendre
+* Qui vous rend productif
+* Et bien adapté aux problèmes du monde réel
+
+!SLIDE
+# Questions ? #
+
+* Les slides sont sur [github.com/nono/Presentations](http://github.com/nono/Presentations)
+* Devblog : [dev.af83.com](http://dev.af83.com)
@@ -0,0 +1,107 @@
+!SLIDE
+# Concurrence #
+
+Rob Pike :
+
+> Programming as the composition of independently executing processes.
+
+!SLIDE
+# Parallélisme #
+
+Rob Pike :
+
+> Programming as the simultaneous execution of (possibly related) computations.
+
+!SLIDE
+# Concurrence vs. parallélisme #
+
+Concurrence : une question de structure de données
+
+Parallélisme : à propos de l'exécution
+
+!SLIDE
+# Goroutine #
+
+```go
+func computation(n int) {
+ time.Sleep(n * time.Milliseconds)
+ fmt.Printf("%s seconds elapsed\n", n)
+}
+go computation(1)
+go computation(3)
+go computation(5)
+computation(7)
+```
+
+!SLIDE
+# Channels #
+
+```go
+func pingpong(ch chan int) {
+ n := <-ch
+ fmt.Printf("Received %d\n", n)
+ ch <- n
+}
+
+func main() {
+ ch := make(chan int)
+ go pingpong(ch)
+ ch <- 42
+ <-ch
+}
+```
+
+!SLIDE
+# Génerateur #
+
+```go
+func idGenerator() chan int {
+ ids := make(chan int)
+ go func() {
+ id := 0
+ for {
+ ch <- id
+ id++
+ }
+ }
+ return ids
+}
+
+ids := idGenerator()
+id1 := <-ids
+id2 := <-ids
+```
+
+!SLIDE
+# Select #
+
+```go
+select {
+ case c1 <- n:
+ fmt.Printf("c1")
+ case s := <-c2:
+ fmt.Printf("c2")
+ case s := <-c3:
+ fmt.Printf("c3")
+}
+```
+
+!SLIDE
+# Timeout #
+
+```go
+timeout := time.After(2 * time.Seconds)
+select {
+ case n := <-ch:
+ fmt.Printf("Received %d", n)
+ case <-timeout
+ fmr.Printf("Too late")
+}
+```
+
+!SLIDE
+# Goroutines + Channels = <3 #
+
+* Ni mutex
+* Ni semaphore
+* Mais c'est très puissant
@@ -0,0 +1,152 @@
+!SLIDE
+# Hello World #
+
+```go
+package main
+
+import "fmt"
+
+func main() {
+ fmt.Println("Hello, 世界")
+}
+```
+
+!SLIDE two_cols
+# Déclarations #
+
+```go
+var a int
+var b bool
+a = 15
+b = false
+```
+
+```go
+a := 15
+b := false
+```
+
+!SLIDE
+# Fonctions #
+
+```go
+func hello(who string) string {
+ return fmt.Sprintf("Hello %s", who)
+}
+
+func fibo(a, b int) (int, int) {
+ a, b = a+b, a
+ return a, b
+}
+
+incr := func(n int) int {
+ return n+1
+}
+```
+
+!SLIDE
+# Structures de contrôle #
+
+```go
+if x > y {
+ return x
+} else {
+ return y
+}
+const nb = 10
+for i := 0; i < nb; i++ {
+ fmt.Printf("Iteration n°%d\n", i)
+}
+```
+
+!SLIDE
+# Tableaux et Slices #
+
+```go
+var array [10]int
+var slice []int
+list := []string{"a", "b", "c", "d", "e", "f"}
+other := append(list[0:2], list[3:5]...)
+for k, v := range other {
+ fmt.Printf("%d -> %s\n", k, v)
+}
+// 0 -> a
+// 1 -> b
+// 2 -> d
+// 3 -> e
+```
+
+!SLIDE
+# Maps #
+
+```go
+data := map[string]string{
+ "foo": "bar",
+ "hello": "world",
+}
+for k, v := range data {
+ fmt.Printf("%s -> %s\n", k, v)
+}
+// hello -> world
+// foo -> bar
+```
+
+!SLIDE two_cols
+# Packages #
+
+```go
+package even
+
+func Even(i int) bool {
+ return i%2 == 0
+}
+
+func odd(i int) bool {
+ return i%2 == 1
+}
+
+// Even is exported
+```
+
+```go
+Import (
+ "./even"
+ "fmt"
+ "os"
+)
+
+os.Open(filename)
+fmt.Printf("Hello")
+even.Even(4)
+// Doesn't work:
+// even.odd(3)
+```
+
+!SLIDE
+# Gestion des erreurs #
+
+```go
+f, err := os.Open(name)
+if err != nil {
+ return err
+}
+if _, err := f.Stat(); err != nil {
+ return err
+}
+doSomething(f)
+```
+
+!SLIDE
+# Defer #
+
+```go
+func foobar(name string) error {
+ f, err := os.Open(name)
+ if err != nil {
+ return err
+ }
+ defer f.Close()
+ fmt.Printf("%v", f)
+ return nil
+}
+```
Binary file not shown.
@@ -0,0 +1,34 @@
+!SLIDE
+# Il était une fois...
+
+* Ken Thompson
+* Rob Pike
+* Robert Griesemer
+
+!SLIDE
+
+![Compiling](compiling.png)
+
+http://xkcd.com/303/ - CC by nc 2.5
+
+!SLIDE
+# L'histoire complète
+
+[Less is exponentially more](http://commandcenter.blogspot.fr/2012/06/less-is-exponentially-more.html)
+
+par Rob Pike
+
+!SLIDE
+# Pourquoi Go ? Maintenant ?
+
+* Go 1 - c'est stable
+* Un langage Open Source
+* La communauté se construit
+
+!SLIDE
+# Go1 en production
+
+* Google
+* Heroku
+* Cloudfare
+* Canonical
@@ -0,0 +1,8 @@
+!SLIDE
+# Bruno Michel #
+
+* Directeur Technique d'[af83](http://dev.af83.com)
+* Développeur de [LinuxFr.org](http://linuxfr.org/)
+* Ancien président de [Ruby France](http://rubyfrance.org/)
+* [github.com/nono](https://github.com/nono)
+* [twitter.com/brmichel](https://twitter.com/brmichel)
@@ -0,0 +1,13 @@
+{
+ "title": "Le monde merveilleux de Go",
+ "theme": "memories",
+ "duration": 30,
+ "sections": {
+ "intro": "Présentation",
+ "history": "Historique",
+ "examples": "Les bases de Go",
+ "concurrency": "La concurrence en Go",
+ "productivity": "Améliorer votre productivité",
+ "conclusion": "Conclusion"
+ }
+}
Oops, something went wrong.

0 comments on commit 3d89626

Please sign in to comment.