Le langage Go, aussi appelé Golang, a été créé par Google dans le but d’obtenir un nouveau langage qui soit plus simple que les autres, tout en étant puissant.
On pourrait dire que, vu sa forte adoption, le pari est réussi. Mais est-ce vraiment le cas ? Golang est-il sur le point de détrôner les autres langages ? Faisons le point sur cette techno made in Google !
Go, l’origine
Go est un langage de programmation compilé créé par Google, et plus précisément par 3 ingénieurs de l’entreprise : Robert Griesemer, Rob Pike et Ken Thompson.
Syntaxiquement très proche du C, il comporte cependant des améliorations importantes, comme un ramasse-miettes et le typage structurel.
Annoncé publiquement en 2012, Go a été créé pour répondre aux besoins suivants :
- Une compilation rapide ;
- Un langage simple à utiliser ;
- Une efficacité dans l’exécution.
Il se classe aujourd’hui au 13ème rang des langages les plus utilisés, selon l’index Tiobe ; ce qui en fait un langage plus populaire que Ruby (classé lui 18ème).
Pour l’anecdote, le nom Golang, souvent utilisé pour parler du langage, est incorrect ! En effet, il s’agit du langage Go, Golang étant employé car le nom de domaine officiel est golang.org (go.com étant déjà utilisé).
Quels cas d’utilisation pour Go ?
Peut-être vous demandez-vous à quoi sert Go, au final ? Il a plusieurs cas d’utilisation possibles.
Déjà, c’est un langage serveur pouvant notamment être utilisé pour faire du serverless, sur AWS Lambda et Google Cloud Functions, par exemple.
On peut aussi l’utiliser pour coder des actions sur des objets connectés (c’est-à-dire de l’IoT – internet of objects).
Mais Go est également utilisable pour faire du développement front-end, notamment grâce GopherJS, un compileur qui traduit du code Go vers du JavaScript.
Cette techno a encore d’autres utilisations, moins mainstream, et elle va probablement en compter de plus en plus à l’avenir.
Golang dans la technique
Maintenant qu’on en sait plus sur le langage, plongeons un peu dans sa technique ! Le langage Go, ayant été développé dans le but d’être différent des autres langages, possède donc logiquement ses propres caractéristiques et sa propre syntaxe.
Caractéristiques de Go
La concurrence avec la goroutine
Go intègre nativement le traitement de code en concurrence, exécutant ce qu’on appelle des goroutines. Une goroutine, c’est un fil d’exécution supervisé par le runtime. Pour changer de fil, il suffit d’utiliser le mot-clé go avant l’appel à une fonction.
Le typage
Golang est langage fortement typé et structurel. Nous verrons des exemples de déclaration de variables typées dans la section suivante.
Il n’est pas orienté objet
Du moins pas à proprement parler. C’est-à-dire, Go ne contient pas de déclaration de classes ni de prototypes, et n’est donc pas techniquement objet. Mais, il est possible d’écrire des interfaces portant des méthodes décrivant le comportement d’un objet. Nous verrons là aussi un exemple de code.
La gestion des erreurs
Go n’envoie pas de warning, uniquement des erreurs. En effet, les concepteurs ont décidé qu’il n’était pas nécessaire d’envoyer des avertissements sur ce qu’il n’est pas nécessaire de corriger.
Par contre, ce langage met dans la catégorie erreurs les variables déclarées non utilisées, ou les librairies importées non utilisées. Donc, déclarer une variable sans rien en faire empêchera la compilation.
Syntaxe
Voyons maintenant quelques exemples de code en langage Go. Pour avoir un premier exemple, regardons à quoi ressemble le basique Hello World :
package main
import "fmt"
func main() {
fmt.Printf("Hello, world\\n")
}
Jusque là, le Go est en effet simple à comprendre.
Prenons un autre exemple, qui nous permettra de voir à la fois comment on utilise les types en Golang, mais également le système de déclarations d’interface dont nous avons parlé :
import "math"
type Shape interface {
Area() float64
}
type Square struct {
side float64
}
func (sq Square) Area() float64 { return sq.side * sq.side }
type Circle struct {
radius float64
}
func (c Circle) Area() float64 {return math.Pi * math.Pow(c.radius, 2) }
C’est assez déroutant, non ?
Les tests en Go
Go vient avec un ensemble de bibliothèques (dont on va parler juste après), et parmi elles se trouve un package de test. Voyons comment s’exécutent les tests en Go :
// Fonction à tester
func ExtractUsername(email string) string {
at := strings.Index(email, "@")
return email[:at]
}
// Import du package
import (
"testing"
)
// Fonction de test
func TestExtractUsername(t *testing.T) {
t.Run("withoutDot", func(t *testing.T) {
username := ExtractUsername("r@google.com")
if username != "r" {
t.Fatalf("Got: %v\\n", username)
}
})
t.Run("withDot", func(t *testing.T) {
username := ExtractUsername("jonh.smith@example.com")
if username != "jonh.smith" {
t.Fatalf("Got: %v\\n", username)
}
})
}
Pour en savoir plus sur la syntaxe de Go, le mieux est de se référer à la documentation officielle de Golang.
Bibliothèques
On vient de le dire, Go vient avec un ensemble de librairies, en voici les principales :
- fyne, fournissant des widgets multiplateformes d’interface graphique utilisateur ;
- fmt, qui fournit les fonctions de mise en forme des entrées-sorties, dont Println, Print et Printf ;
- time, qui donne des outils de mesure des temps d’exécution, comme time.Now et time.Since() ;
- math, qui fournit logiquement un ensemble de fonctions mathématiques, telles que Min et Max ;
- os interface le système, par exemple pour ouvrir et fermer des fichiers ;
- io, fournit des procédures d’entrées-sorties elles-mêmes ;
- strings fournit des dizaines de méthodes traitant des chaînes de caractères.
Pour la liste complète, la documentation spécifiques se trouve ici !
Tools
De plus, Go intègre un ensemble de commandes à exécuter (ou tools, outils) dans un terminal, de manière à faciliter son développement :
go build
compile les fichiers écrits en Go pour en faire des binaires compilés ;go test
pour les tests, dont on a déjà parlé ;go fmt
pour le formattage du code ;go install
qui sert à installer des paquets distants ;go vet
un analyseur statique qui sert à détecter les potentielles erreurs dans le code ;go run
permettant de build et d’exécuter le code source ;godoc
pour afficher la documentation ;gorename
qui permet le renomage des variables ou des fonctions ;go generate
qui appelle un générateur de code standard.
Faut-il se mettre à Golang en 2022 ?
On vient de le voir, Go est un langage récent, qui a eu une adoption assez forte, mais faut-il vraiment se mettre à coder dans ce langage en 2022 ? Faisons le point sur ses avantages et les inconvénients.
Les avantages de Go
Golang a pour lui pas mal d’avantages, dont certains déjà cités :
- Il est basé sur le C, mais est en quelque sorte une version améliorée (il possède par exemple un ramasse-miettes) ;
- Il est plutôt simple et clair ; la courbe d’apprentissage ne sera donc pas trop raide ;
- Go est rapide. Étant compilé en langage machine, Golang aura forcément un avantage sur tout langage interprété.
- Le binaire généré post compilation est très léger ;
- Il a une gestion très efficace de la concurrence et du multithreading, gâce aux goroutines.
Les inconvénients de Go
Go a beau avoir des avantages intéressants pour lui, il est aussi critiqué sur plusieurs points :
- Sa gestion des erreurs est particulière, comme on l’a dit, il n’y a pas de warning et le champ de ce qui rentre dans la catégorie erreur est assez vaste ;
- Golang n’a pas de bibliothèque graphique native ; on doit donc lui en connecter une externe ;
- Go est un langage récent, pas parfait et qui doit encore faire ses preuves, face à des géants comme Java, C ou Python.
Comment apprendre Golang ?
Après avoir lu les caractéristiques de Go, ses avantages et inconvénients, vous voulez vous y mettre ? Vous pensez que c’est un langage qui va prendre de l’ampleur et vous ne voulez pas rater la vague ?
Mais alors, comment l’apprendre ?
Golang étant un langage encore jeune, la meilleure façon de l’apprendre est par soi-même, sur le web ! Si on est déjà rompu à la programmation, notamment à des langages comme le C, ça ne sera pas trop compliqué. On l’a dit, la courbe d’apprentissage est plutôt douce.
Si on n’est pas développeur freelance ou qu’on utilise un langage complètement différent, Golang est idéal pour s’initier à ce type de programmation.
Pour l’apprendre, il y a évidemment la documentation officielle, mais on trouve aussi des tutoriels sur YouTube, par exemple sur la très connue chaîne freeCodeCamp. Voici un de leurs cours, une vidéo de presque 7 heures pour apprendre le langage Go.
Le futur de Go
Alors, Go est-il le langage du futur ?
Si il est probable qu’il prenne de plus en plus d’ampleur, il est évident que Go ne remplacera pas ses concurrents déjà bien installés. De plus, Golang est encore jeune, et il a besoin d’évolutions – qui viendront sûrement dans les prochaines années – pour augmenter son taux d’adoption.
En attendant, il reste un langage de programmation plutôt simple et puissant, et s’y intéresser de plus près ne coûte pas grand chose.
Dites-nous en commentaire ce que vous, vous pensez de Go !