Accueil - Informatique - Programmation - Langages

Premiers pas avec le langage GO

Publié le mercredi 14 octobre 2015.


Dernière mise à jour : 03/11/2017

Introduction


J’ai commencé à m’intéresser à ce langage à la lecture d’un article paru dans le numéro 186 de la revue Programmez en juin dernier.
La première version stable 1.0 est sortie en 2012 et le langage met à la disposition du programmeur une librairie standard complète et bien concue.

Go est un langage concis, efficace et simple à mettre en œuvre.
Sa syntaxe inspirée du C améliore la productivité. La compilation est très rapide et génère un exécutable facilement déployable. C’est un langage statiquement typé, doté d’un ramasse miette, (GC pour Garbage Collector), permettant la programmation concurrente (goroutine) associée à des mécanismes de communication et de synchronisation (channel).

Plusieurs concepts sont destinés à simplifier la vie du programmeur tel que
la gestion des dépendances (package), dont le gestionnaire de paquetage est intégré à la commande go et basé sur des services web d’hébergement et de gestion de développement de logiciels comme GitHub ou Mercurial. Le formatage automatique du code est standardisé et partagé grâce à l’outil gofmt.
La création de paquetage faisant appel à des librairies C tierces est simplifiée par l’outil cgo.

En Go, il n’y a pas de classe ni d’héritage au sens de la POO classique. Les classes sont remplacées par des structures (structs) et l’héritage se fait par composition et utilisation d’interfaces. L’interface(s) décrit le comportement d’un objet en définissant les méthodes qu’il doit implémenter. Pour créer un objet, on associe un type de données, appelé "receiver" à une méthode. Tout objet respectant le contrat défini par une interface pourra hériter du comportement de celle ci.

Go est également un langage multi-plateforme : Linux (Intel , ARM), Windows, Mac OS X, pour lequel le déploiement d’une application consiste à copier et utiliser l’exécutable généré. Pas besoin d’installer tout un écosystème ou de déployer une machine virtuelle comme c’est la cas avec les langages interprétés comme Perl ou Python.
Jusqu’à la version 1.4.x, il était nécessaire d’avoir un compilateur C pour compiler et installer Go à partir des sources. A partir de la version 1.5, les dernières versions stables n’apportent pas de changements importants au niveau de la sémantique du langage mais le compilateur, entièrement écrit en Go, apporte une simplification des outils utilisés dans la chaine de compilation (go tools).

Installation


Pour installer Go depuis les sources ou les binaires depuis : https://golang.org/dl/.

Le détail des opérations est très bien documenté ici.

Sous Windows, récupérer et décompresser le fichier zip sous c :\go puis rajouter le chemin c :\go\bin dans le path Windows. Si vous installez go dans un autre répertoire, il faudra définir la variable GOROOT avec qu’elle pointe sur l’exécutable go.

Pour installer Go depuis les fichiers sources : suivre les instructions ici.

cgo


cgo permet la création de paquets ou programmes Go appelant du code C.
La documentation se trouve ici : https://golang.org/cmd/cgo/.

Le site de Golang, au chapitre Install C tools, conseille d’installer TDM-GCC sous Windows mais ce dernier ne permet pas l’édition des liens avec des librairies compilées avec le compilateurs C Microsoft comme la librairie NetCDF.

Le compilateur gcc MSYS2ne fonctionne pas non plus car le module runtime/cgo ne se compile pas avec un compilateur POSIX.
Voir Golang issue 12029.

Il faut installer la chaine de compilation mingw-64 livrée avec le shell MSYS et le programme pkg-config pour réaliser l’édition des liens avec la librairie NetCDF.

Cygwin
On peut également utiliser go sous Cygwin, il suffit de rajouter les lignes suivantes dans votre .bashrc si votre répertoire personnel est sous /home/username par exemple :

$ export GOROOT=c:/go
$ export GOBIN=c:/cygwin/home/username/go/bin
$ export GOPATH=c:/cygwin/home/username/go

Dans votre répertoire de travail go, eg /home/go, créer les 3 sous-répertoires bin, pkg et src

$ cd ~/go
$ mkdir -p src bin pkg

Tester avec :

$ go env

Développements en cours :


Oceano2oceansites :

Programme de lecture des fichiers d’une sonde CTD Seabird et de génération d’un fichier global au format Netcdf3. Il est prévu de pouvoir traiter d’autres types de données acquises, comme les fichiers de prélèvements bouteilles, profils XBT et LADCP, etc.
Développement en cours.

Seawater : implémentation en Go de la toolbox Matlab Seawater.

cruiseTrack2kml : convertit la position des stations et la route du navire au format KML, fichier visualisable sous Google Earth, voir exemple.

SbeReport : extrait la configuration et les numéros de série des capteurs d’une CTD Seabird 911+ pour un ensemble de stations.

Liens utiles


En anglais :

En français :

Livres :

Livres en ligne :