Go to Hackademy website

Premiers pas avec Go

Nicolas Zermati

Posté par Nicolas Zermati dans les catégories back

Plutôt que de parler de Ruby, je vais élargir le spectre de notre blog dans une série d’articles sur la découverte du langage Go.

Go est bien loin de Ruby par bien des aspects, il s’agit d’un langage compilé, statiquement typé et concurrent. Son modèle objet est également très loin de ce que l’on trouve en Ruby.

Pour autant, on retrouve des bibliothèques standards cohérentes, un ramasse-miette, une forme de duck-typing, de l’inférence de type, une compilation très rapide, etc. Ces points rendent Go très proche, dans la pratique, d’un langage de script.

Installation

L’installation de Go est très simple. Il vous faut tout d’abord télécharger le compilateur puis le décompresser où bon vous semble. Ensuite, il vous faut définir quelques variables d’environnement :

export GOPATH=/where/you/will/write/go/code
export GOROOT=/where/you/unzip/the/go/compiler
export PATH=$GOROOT/bin:$PATH

Les variables GOROOT et PATH ont une signification classique dans le monde Unix. La variable GOPATH pointe le répertoire dans lequel vous devez écrire votre code, c’est également ici que sont rappatriées les sources des packages externes.

Une fois ces deux étapes effectuées, vous pouvez vous rendre dans GOPATH

Organisation du code

L’arborescence du répertoire GOPATH est composée de 3 répertoires principaux :

  • bin : les exécutables compilés,
  • pkg : les bibliothèques et
  • src : les sources des bibliothèques et applications.

Le code se décompose en deux types de packages : bibliothèques et programmes.

Le système de package de Go est simple et efficace. Vous choississez une URL et l’ajoutez dans le $GOPATH/src, par exemple un package nommé synbioz/gosteps aura ses sources dans $GOPATH/src/synbioz/gosteps.

Bibliothèques

Les bibliothèques ne produisent pas de fichiers binaires mais des fichiers précompilés destinés à être réutilisés. Ces fichiers sont placés dans le répertoire $GOPATH/pkg.

La convention veut que le dernier élément du chemin du package soit son nom. Ainsi dans notre exemple on aura l’entête suivante pour les fichiers du package :

package gosteps

La compilation et l’installation peuvent se faire via les commandes suivantes :

go build n25/gosteps
go install n25/gosteps

Programmes

Les programmes sont identiques aux bibliothèques mais utilisent main comme nom de package.

La compilation et l’installation peuvent se faire via les mêmes commandes que pour les bibliothèques. Par contre à l’issue de l’installation, c’est un binaire qui sera placé dans le dossier $GOPATH/bin. Ce binaire généré portera le nom du dernier élément du chemin du package.

Import de packages

Depuis les packages, on peut référencer le contenu des autres bibliothèques avec le mot clé import :

import "synbioz/gosteps"

Ensuite, on utilise le contenu du pakage importé en le préfixant de son nom :

gosteps.Hello()

Seules les fonctions commencant par une majuscule sont visibles de l’extérieur d’un package. Idem pour les champs des structures, mais nous en reparlerons…

Conclusion

Voila pour ce premier article concernant Go et son installation.

Dans mes prochains articles, j’aborderai plus en détails les fonctionnalités du langage en mettant en place une intelligence articifielle pour le jeu Quarto.

L’équipe Synbioz.

Libres d’être ensemble.

Articles connexes

Ruby, Sidekiq et Crystal

25/07/2019

Dans le cadre d’une application web il nous est tous déjà arrivé de devoir effectuer une tâche assez longue en asynchrone pour ne pas gêner le flux de notre application. En Ruby la solution la plus...

Du dosage à la rouille

13/06/2019

Parlons de la rouille, cette délicieuse sauce qui accompagne nos soupes de poisson. Le bon dosage des ingrédients ravira le palais vos convives ! Pour faire une portion de rouille les ingrédients...

Une brève histoire d'Elixir et Erlang/OTP

31/01/2019

Je développe depuis plusieurs années en Ruby. Depuis mon arrivée chez Synbioz, j’expérimente en plus avec Elixir de façon assez naturelle. En quoi Elixir est-il différent, me demanderez-vous ? Pour...

Écrire une thread pool en Ruby

10/01/2019

Pouvoir exécuter plusieurs tâches en parallèle, que ce soit dans un script ou une application, peut être vraiment très utile, surtout dans le cas où le traitement de ces tâches peut être très long....