SlideShare une entreprise Scribd logo
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
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
MAIS AUSSI
ET AUSSI
Go Go Power Rangers!!!
Python is the way to go
Go sport / Go voyages
Pokemon Go
ET DONC GOLANG...
Uniquement pour le SEO
Assez répandu
Pas recommandé par Rob Pike
POURQUOI GO ?
La simplicité
Les interfaces
Les goroutines / channels
La toolchain
La librairie standard
Rapidité de compilation
GO UN LANGAGE SIMPLE
package main
import "fmt"
func main() {
// L'Unicode ça doit être simple...
fmt.Println("Hello 世界")
}
fmt Documentation
UNE SEULE BOUCLE
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
for ; sum > 0; {
sum -= 1
}
for sum < 1000 {
sum += 1
}
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
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)
}
DES SLICES (ET DES TABLEAUX)
// Array : taille fixe
var a [10]int
// Slice : taille variable
var b[]int
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 {
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"])
}
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]
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))
}
PROGRAMATION ORIENTÉE OBJET
Héritage
Encapsultation
Polymorphisme
POO EN GO ?
Go pas d'héritage (interface)
Pas de classe (struct)
Polymorphisme
INTERFACES
Pour principe de substitution de Liskov
(pas d'héritage)
Implicites
(pas besoin de modi er les packages externes)
Peuvent être déroutantes
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)
}
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 {
GOROUTINES
Plus légers que les thread
Usage de la stack optimisé
Switchs peu couteux
Concurrency != parallelism
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
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")
CHANNELS
"Don't communicate by sharing memory,
share memory by communicating."
-- Rob Pike
CHANNELS
Vont de paire avec les goroutines
First class elements
Bufferisés ou pas
Pas de callback !
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}
TOOLCHAIN
Point d'entrée unique
GOPATH
go get
go build
go run
go ...
go test
TOOLCHAIN
Intégrable à l'éditeur
go import
go format
Cross compilation
Temps de compilation
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
LIBRAIRIE STANDARDBIEN FOURNIE
Liste des
- Index et moteur de recherche des packages
- Moteur de recherche de code
packages standards
GoDoc
Go Search
And github...
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
LAKILLERAPP ?
TOUT UN ÉCOSYTÈME
/
Kubernetes
Trae k
Gogs Gitea
Drone
Rook
Grafana
Prometheus
COMMUNAUTÉ
(blog, documentation, tour...)
**Autopromotion éhontée**
Site of ciel Golang
Go Tour
Go proverbs
French Go
Meetup GolangMarseille
Gofr Podcast
UN LANGAGE EN CONSTANTE
AMÉLIORATION
Release fréquentes
Modules
Webassembly
Go 2
Generics avec contrat
Gestion des erreurs moins fastidieuse
UNE CHOUETTE MASCOTTE
GO POURQUOI FAIRE ?
Backend/Système
Application avec GUI
Browser
Embarqué
Presque tout sauf du bas niveau
APPLICATION AVEC GUI
astilectron
Qt
Ui
Nuklear
MÊME DES JEUX3D
BROWSER
Webassembly
GOOS=js GOARCH=wasm go build -o main.wasm
Gopher.js
EMBARQUÉ
Raspberry (arm)
Gobot
Embd
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
MERCIMERCIMERCIMERCIMERCIMERCI
Des questions ?
TOUT N'EST PAS PARFAIT
La gestion des erreurs
Les générics
Manque de packages dans certains domaines
(Machine Learning...)

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
 
DartttttttttttttttttttttttversionFinal.pdf
DartttttttttttttttttttttttversionFinal.pdfDartttttttttttttttttttttttversionFinal.pdf
DartttttttttttttttttttttttversionFinal.pdfzoulaikhibenaachourn
 

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
 
DartttttttttttttttttttttttversionFinal.pdf
DartttttttttttttttttttttttversionFinal.pdfDartttttttttttttttttttttttversionFinal.pdf
DartttttttttttttttttttttttversionFinal.pdf
 

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

  • 1.
  • 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...)