VT2016 Go

From air
Revision as of 18:21, 15 October 2016 by Marwan.Hallal (talk | contribs)
Jump to: navigation, search

Présentation

  • Sujet : Go, un langage pour les serveurs
  • Auteur : Marwan Hallal
  • Enseignants : Didier Donsez, Georges-Pierre Bonneau
  • Date : 14/10/2016


  • Mots-clés : Go, langage, système, concurrence


Historique

Le langage Go a été crée en 2007 au sein de Google par une équipe de trois ingénieurs: Robert Griesemer, Ken Thompson (Unix) et Rob Pike (UTF-8). Le projet devient open-source le 10 Novembre 2009.

Le nouveau langage était une réponse à certains grands problèmes rencontrés lors du développement de l'infrastructure interne de Google:

  • lenteur du processus de build
  • mauvaise gestion des dépendances
  • coût des mises à jour
  • illisibilité du code, mauvaise documentation


Introduction

Go est un langage compilé, statiquement typé, concurrent et avec une gestion automatique de la mémoire (garbage-collection). Aujourd'hui, beaucoup de projets utilisent le langage Go, notamment Docker, Vitess (système de clustering pour MySQL, utilisé pour l'infrastructure de YouTube), InfluxDB, ainsi que le serveur de téléchargement de Google.

C'est un langage de la famille C (syntaxe de base), mais qui s'est inspiré aussi des langages Pascal et Modula (déclarations, packages). Le modèle de concurrence de Go repose sur le langage formel dit CSP de Tony Hoare.

Une librairie standard exhaustive permet aux développeurs de créer des applications qui accédent au réseau en sécurité (crypto), d'internationaliser (i18n) leur programmes (support Unicode), et de manipuler les données dans beaucoup des base de données les plus utilisées (drivers SQL).

Syntaxe de base

La syntaxe du langage Go est proche de celle du langage C; Les strucutres de contrôle (if..else, for, switch) s'écrivent presque de la même façon. Les instructions en Go ne se terminent pas par un point-virgule, celles-ci étant ajoutées automatiquement par le compilateur.

Il existe deux façons pour déclarer une variable en Go:

  • Déclaration sans initialisation
        var x int
        var y string
  • Délcaration avec initialisation
   <syntaxhighlight lang="go">
       var x = 5 // inférence de type
       // ou
       x := 5
   </syntaxhighlight