Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Ève

Mon premier vrai programme en Go

Première rédaction de cet article le 8 décembre 2009


Mon premier « vrai » programme en Go est un client whois, une mise en œuvre du RFC 3912.

Go, créé par Google, est surtout intéressant comme langage de programmation « système ». Il est donc concurrent de C et C++, sur un créneau où il y a relativement peu de candidats (certains, comme D, n'ont eu aucun succès). Certains commentateurs s'étaient étonné que Google crée encore un nouveau langage de programmation lors qu'il y en a déjà des milliers mais, contrairement aux langages fonctionnels, les langages « système » sont bien plus rares.

Le code de mon client whois est en whois.go. Mon point de départ avait été socketgo. (Un autre programme de niveau de complexité analogue est un client pour l'entrepôt de données de Rennes, gostar.go.) Quelques points qui m'ont interpellé pendant le développement du client whois :

  • Le compilateur qui a un nom différent selon le type du processeur (très énervant, pour écrire des Makefile portables, ce n'est qu'après que j'ai appris à mettre include $(GOROOT)/src/Make.$(GOARCH)),
  • La très bonne documentation des paquetages standard,
  • La conversion obligatoire des string en []byte, les premières étant nécessaires pour l'affichage et les seconds servant aux entrées/sorties (j'ai créé un Buffer pour cela, y avait-il une meilleure solution ?),
  • La séparation entre la création d'une variable (où on peut lui donner une valeur avec :=) et sa mutation ultérieure (où on doit utiliser =),
  • L'absence d'exceptions, probablement le plus gros manque du langage,
  • La déclaration automatique d'une variable, avec inférence de types, ce qui m'a rappelé Haskell,
  • Et, bien sûr, comme tous les débutants en Go, le fait qu'une variable déclarée doive être utilisée, sous peine du désormais célèbre message XXX declared and not used.

Mon deuxième programme, pour illustrer le parallélisme en Go est un serveur du protocole echo, NoNewContent. Plus perfectionné et tout aussi parallèle, un serveur de noms en Go.

J'ai aussi fait un exposé en français sur Go. Je stocke mes liens vers des ressources Go en http://delicious.com/bortzmeyer/golang.

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)