SlideShare une entreprise Scribd logo

Google Developer Group (GDG) Aix-Marseille #1 (27/08/2018)

A la découverte du langage GO (http://talks.assad.fr/20180927_gdg/talk-discovering_go/#/)

1  sur  49
Télécharger pour lire hors ligne
Google Developer Group (GDG) Aix-Marseille #1 (27/08/2018)
ALADÉCOUVERTE DU GO
Arnaud "Arhuman" Assad (arhuman@gmail.com)
Aussi sur Twitter Linkedin Github
LE LANGAGE GO
Créé en 2009 par Google
(Robert Griesemer, Rob Pike et Ken Thompson)
Inspiré du C et de Pascal
Langage compilé
Récupérateur de mémoire (garbage-collected)
OSCON 2010
Go aims to combine the safety and performance of a statically typed
compiled language with the expressiveness and convenience of a
dynamically typed interpreted language.
It also aims to be suitable for modern systems - large scale -
programming.
-- Rob Pike
GO(LANG) EXEMPLE
package main
import "fmt"
func main() {
list := []int{31, 41, 59, 26, 53, 58, 97, 93, 23, 84}
fmt.Println("unsorted:", list)
bubblesort(list)
fmt.Println("sorted! ", list)
}
func bubblesort(a []int) {
for itemCount := len(a) - 1; ; itemCount-- {
hasChanged := false
for index := 0; index < itemCount; index++ {
LE LANGAGE GO!
Créé en 2003 par Keith Clark et Francis McCabe.
Programmation concurrentielle

Recommandé

Asyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronesAsyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronestchappui
 
Fltau r interface
Fltau r interfaceFltau r interface
Fltau r interfaceCdiscount
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniShellmates
 
Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...ECAM Brussels Engineering School
 
Pseudo code DFS (Temps d'exécution avec python)
Pseudo code DFS (Temps d'exécution avec python)Pseudo code DFS (Temps d'exécution avec python)
Pseudo code DFS (Temps d'exécution avec python)WaelTOUMI2
 

Contenu connexe

Tendances

Développement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresDéveloppement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresECAM Brussels Engineering School
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancépierrepo
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesECAM Brussels Engineering School
 
201305 - Lambda by R. Forax
201305 - Lambda by R. Forax201305 - Lambda by R. Forax
201305 - Lambda by R. Foraxlyonjug
 
Enib cours c.a.i. web - séance #5 - groovy
Enib   cours c.a.i. web - séance #5 - groovyEnib   cours c.a.i. web - séance #5 - groovy
Enib cours c.a.i. web - séance #5 - groovyHoracio Gonzalez
 
Programmation fonctionnelle
Programmation fonctionnelleProgrammation fonctionnelle
Programmation fonctionnelleGeeks Anonymes
 
09 big data mapreduce
09 big data mapreduce09 big data mapreduce
09 big data mapreducePatrick Bury
 
Code Week 2014 - atelier d'initiation à la programmation avec python
Code Week 2014 - atelier d'initiation à la programmation avec pythonCode Week 2014 - atelier d'initiation à la programmation avec python
Code Week 2014 - atelier d'initiation à la programmation avec pythonbbourgois
 
Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2Emeric Tapachès
 
Good or Evil: les fonctions anonymes en Javascript
Good or Evil: les fonctions anonymes en JavascriptGood or Evil: les fonctions anonymes en Javascript
Good or Evil: les fonctions anonymes en JavascriptNoirdes
 
Développement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreDéveloppement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreECAM Brussels Engineering School
 
Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++
Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++
Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++Fabio Hernandez
 

Tendances (20)

Développement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresDéveloppement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulières
 
Formation python
Formation pythonFormation python
Formation python
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 
Implementing a key/value store
Implementing a key/value storeImplementing a key/value store
Implementing a key/value store
 
Python avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiersPython avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiers
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de données
 
201305 - Lambda by R. Forax
201305 - Lambda by R. Forax201305 - Lambda by R. Forax
201305 - Lambda by R. Forax
 
Enib cours c.a.i. web - séance #5 - groovy
Enib   cours c.a.i. web - séance #5 - groovyEnib   cours c.a.i. web - séance #5 - groovy
Enib cours c.a.i. web - séance #5 - groovy
 
Programmation fonctionnelle
Programmation fonctionnelleProgrammation fonctionnelle
Programmation fonctionnelle
 
09 big data mapreduce
09 big data mapreduce09 big data mapreduce
09 big data mapreduce
 
Code Week 2014 - atelier d'initiation à la programmation avec python
Code Week 2014 - atelier d'initiation à la programmation avec pythonCode Week 2014 - atelier d'initiation à la programmation avec python
Code Week 2014 - atelier d'initiation à la programmation avec python
 
Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2
 
Good or Evil: les fonctions anonymes en Javascript
Good or Evil: les fonctions anonymes en JavascriptGood or Evil: les fonctions anonymes en Javascript
Good or Evil: les fonctions anonymes en Javascript
 
Programmation Fonctionnelle
Programmation FonctionnelleProgrammation Fonctionnelle
Programmation Fonctionnelle
 
Chapitre2 2
Chapitre2 2Chapitre2 2
Chapitre2 2
 
Python avancé : Tuple et objet
Python avancé : Tuple et objetPython avancé : Tuple et objet
Python avancé : Tuple et objet
 
Développement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreDéveloppement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbre
 
Tp-jquery
Tp-jqueryTp-jquery
Tp-jquery
 
Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++
Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++
Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++
 
Python avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codagePython avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codage
 

Similaire à Google Developer Group (GDG) Aix-Marseille #1 (27/08/2018)

SdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoireSdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoireAlexandru Radovici
 
Lect14 dev2
Lect14 dev2Lect14 dev2
Lect14 dev2moisko
 
Presentation langage go_19022015
Presentation langage go_19022015Presentation langage go_19022015
Presentation langage go_19022015Stéphane Legrand
 
De java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDe java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDidier Plaindoux
 
Interception de signal avec dump de la pile d'appel
Interception de signal avec dump de la pile d'appelInterception de signal avec dump de la pile d'appel
Interception de signal avec dump de la pile d'appelThierry Gayet
 
R fait du la tex
R fait du la texR fait du la tex
R fait du la texCdiscount
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanMicrosoft
 
Claire epita-février2014
Claire epita-février2014Claire epita-février2014
Claire epita-février2014Yves Caseau
 
Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++cppfrug
 
Algorithmique programmation2018
Algorithmique programmation2018Algorithmique programmation2018
Algorithmique programmation2018salah fenni
 
Introduction au langage Go
Introduction au langage GoIntroduction au langage Go
Introduction au langage GoSylvain Wallez
 
01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdfMARYAM510573
 
201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8lyonjug
 
Future of java script web version
Future of java script web versionFuture of java script web version
Future of java script web versionSébastien Pertus
 

Similaire à Google Developer Group (GDG) Aix-Marseille #1 (27/08/2018) (20)

SdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoireSdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoire
 
Cours de Génie Logiciel / ESIEA 2016-17
Cours de Génie Logiciel / ESIEA 2016-17Cours de Génie Logiciel / ESIEA 2016-17
Cours de Génie Logiciel / ESIEA 2016-17
 
Lect14 dev2
Lect14 dev2Lect14 dev2
Lect14 dev2
 
Presentation langage go_19022015
Presentation langage go_19022015Presentation langage go_19022015
Presentation langage go_19022015
 
De java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDe java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvements
 
Algo poo ts
Algo poo tsAlgo poo ts
Algo poo ts
 
Interception de signal avec dump de la pile d'appel
Interception de signal avec dump de la pile d'appelInterception de signal avec dump de la pile d'appel
Interception de signal avec dump de la pile d'appel
 
R fait du la tex
R fait du la texR fait du la tex
R fait du la tex
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet Spartan
 
COURS_PYTHON_22.ppt
COURS_PYTHON_22.pptCOURS_PYTHON_22.ppt
COURS_PYTHON_22.ppt
 
Claire epita-février2014
Claire epita-février2014Claire epita-février2014
Claire epita-février2014
 
C++ 11/14
C++ 11/14C++ 11/14
C++ 11/14
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++
 
Algorithmique programmation2018
Algorithmique programmation2018Algorithmique programmation2018
Algorithmique programmation2018
 
Introduction au langage Go
Introduction au langage GoIntroduction au langage Go
Introduction au langage Go
 
01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf
 
201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8
 
R for data analysis
R for data analysisR for data analysis
R for data analysis
 
Future of java script web version
Future of java script web versionFuture of java script web version
Future of java script web version
 

Google Developer Group (GDG) Aix-Marseille #1 (27/08/2018)

  • 2. ALADÉCOUVERTE DU GO Arnaud "Arhuman" Assad (arhuman@gmail.com) Aussi sur Twitter Linkedin Github
  • 3. LE LANGAGE GO Créé en 2009 par Google (Robert Griesemer, Rob Pike et Ken Thompson) Inspiré du C et de Pascal Langage compilé Récupérateur de mémoire (garbage-collected)
  • 4. OSCON 2010 Go aims to combine the safety and performance of a statically typed compiled language with the expressiveness and convenience of a dynamically typed interpreted language. It also aims to be suitable for modern systems - large scale - programming. -- Rob Pike
  • 5. GO(LANG) EXEMPLE package main import "fmt" func main() { list := []int{31, 41, 59, 26, 53, 58, 97, 93, 23, 84} fmt.Println("unsorted:", list) bubblesort(list) fmt.Println("sorted! ", list) } func bubblesort(a []int) { for itemCount := len(a) - 1; ; itemCount-- { hasChanged := false for index := 0; index < itemCount; index++ {
  • 6. LE LANGAGE GO! Créé en 2003 par Keith Clark et Francis McCabe. Programmation concurrentielle
  • 7. GO! - EXEMPLE Gender::= male | female. person <˜ {dayOfBirth:[]=>day. age:[]=>integer. gender:[]=>Gender. name:[]=>string. home:[]=>string. lives:[string]{}}. person:[string,day,Gender,string]$=person. person(Nm,Born,Sx,Hm)..{ dayOfBirth()=>Born. age() => yearsBetween(now(),Born). gender()=>Sx. name()=>Nm. home()=>Hm. lives(Pl) :- Pl=home(). yearsBetween:[integer day]=>integer
  • 9. ET AUSSI Go Go Power Rangers!!! Python is the way to go Go sport / Go voyages Pokemon Go
  • 10. ET DONC GOLANG... Uniquement pour le SEO Assez répandu Pas recommandé par Rob Pike
  • 11. POURQUOI GO ? La simplicité Les interfaces Les goroutines / channels La toolchain La librairie standard Rapidité de compilation
  • 12. GO UN LANGAGE SIMPLE package main import "fmt" func main() { // L'Unicode ça doit être simple... fmt.Println("Hello 世界") } fmt Documentation
  • 13. UNE SEULE BOUCLE sum := 0 for i := 0; i < 10; i++ { sum += i } for ; sum > 0; { sum -= 1 } for sum < 1000 { sum += 1 }
  • 14. TYPES DE BASE bool string int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr byte // alias pour uint8 rune // alias pour int32 // représente un "code point" Unicode float32 float64 complex64 complex128
  • 15. DES TYPES COMPOSÉS package main import "fmt" type Sommet struct { X int Y int } func main() { v := Sommet{1, 2} v.X = 4 fmt.Println(v.X) }
  • 16. DES SLICES (ET DES TABLEAUX) // Array : taille fixe var a [10]int // Slice : taille variable var b[]int
  • 17. DES SLICES // Des slices de slices game := [][]string{ []string{"_", "_", "_"}, []string{"_", "_", "_"}, []string{"_", "_", "_"}, } // Morceau de slice retourne un slice game[1:3] // ou game[1:] // Ajout game = append(game, []string{" ", " "," "}); // Boucle for avec range for i v := range game {
  • 18. DES MAPS type Sommet struct { Lat, Long float64 } var m map[string]Sommet func main() { m = make(map[string]Sommet) m["Bell Labs"] = Sommet{ 40.68433, -74.39967, } fmt.Println(m["Bell Labs"]) }
  • 19. DES MAPS // Affectation m[key] = elem // Récupération elem = m[key] // Suppression delete(m, key) // Test existence elem, ok = m[key] // _, ok = m[key]
  • 20. FIRST CLASS FUNCTIONS func compute(fn func(float64, float64) float64) float64 { return fn(3, 4) } func main() { hypot := func(x, y float64) float64 { return math.Sqrt(x*x + y*y) } fmt.Println(hypot(5, 12)) fmt.Println(compute(hypot)) fmt.Println(compute(math.Pow)) }
  • 22. POO EN GO ? Go pas d'héritage (interface) Pas de classe (struct) Polymorphisme
  • 23. INTERFACES Pour principe de substitution de Liskov (pas d'héritage) Implicites (pas besoin de modi er les packages externes) Peuvent être déroutantes
  • 24. STRUCT +FONCTION =>MÉTHODE type Sommet struct { X, Y float64 } func (s Sommet) Abs() float64 { return math.Sqrt(s.X*s.X + s.Y*s.Y) }
  • 25. INTERFACE =LISTE DE MÉTHODES package main import ( "fmt" "math" ) type cercle struct { rayon float64 } func (c cercle) aire() float64 { return math.Pi * c.rayon * c.rayon } func (c cercle) perimetre() float64 {
  • 26. GOROUTINES Plus légers que les thread Usage de la stack optimisé Switchs peu couteux Concurrency != parallelism
  • 27. GOROUTINES Des millions de goroutines possible 50 fois plus rapide à lancer qu'un thread 2-4K vs 2M sur la stack Changement de contexte peu couteux Un thread système gère plusieurs goroutines
  • 28. GOROUTINE - EXEMPLE package main import ( "fmt" "time" ) func longTraitement(d int, s string) { time.Sleep(time.Duration(d) * time.Second) fmt.Println(s) } func main() { go longTraitement(3 "Premier long Traitement")
  • 29. CHANNELS "Don't communicate by sharing memory, share memory by communicating." -- Rob Pike
  • 30. CHANNELS Vont de paire avec les goroutines First class elements Bufferisés ou pas Pas de callback !
  • 31. CHANNELS package main import "fmt" func sum(s []int, c chan int) { sum := 0 for _, v := range s { sum += v } c <- sum // send sum to c } func main() { s := []int{7, 2, 8, -9, 4, 0}
  • 32. TOOLCHAIN Point d'entrée unique GOPATH go get go build go run go ... go test
  • 33. TOOLCHAIN Intégrable à l'éditeur go import go format Cross compilation Temps de compilation
  • 34. TEMPS DE COMPILATION Analyse plus simple Pas de dépendances inutilisées Pas de dépendances cycliques Syntaxe régulière Un import => un chier à charger Format objet avec les exports en début de chier
  • 35. LIBRAIRIE STANDARDBIEN FOURNIE Liste des - Index et moteur de recherche des packages - Moteur de recherche de code packages standards GoDoc Go Search And github...
  • 36. HTTP SERVER package main import ( "net/http" ) func main() { fs := http.FileServer(http.Dir("static/")) http.Handle("/", fs) // http.Handle("/static/", http.StripPrefix("/static/", fs)) http.ListenAndServe(":8080", nil) } net/http Documentation
  • 38. TOUT UN ÉCOSYTÈME / Kubernetes Trae k Gogs Gitea Drone Rook Grafana Prometheus
  • 39. COMMUNAUTÉ (blog, documentation, tour...) **Autopromotion éhontée** Site of ciel Golang Go Tour Go proverbs French Go Meetup GolangMarseille Gofr Podcast
  • 40. UN LANGAGE EN CONSTANTE AMÉLIORATION Release fréquentes Modules Webassembly Go 2 Generics avec contrat Gestion des erreurs moins fastidieuse
  • 42. GO POURQUOI FAIRE ? Backend/Système Application avec GUI Browser Embarqué Presque tout sauf du bas niveau
  • 45. BROWSER Webassembly GOOS=js GOARCH=wasm go build -o main.wasm Gopher.js
  • 47. CREDITS pour l'idée du Gopher sur les slides pour le bonheur de ne plus utiliser PowerPoint Vous êtes libre de modi er/copier/redistribuer librement cette présentation. kljensen/go-is-awesome Reveal.js
  • 49. TOUT N'EST PAS PARFAIT La gestion des erreurs Les générics Manque de packages dans certains domaines (Machine Learning...)