Podcast: Téléchargement
Dans la série langages, Antoine et Fabrice accueillent aujourd’hui Stéphane Klein que vous pouvez retrouver sur twitter ici et qui nous parle du langage Go de Google.
Sommaire
Histoire du langage Golang
- Qui, quand ?
- 2007 création interne Google : « Chez Google, nous pensons que la programmation devrait être rapide, productive et surtout, ‘fun’. C’est pourquoi nous sommes ravis de proposer ce nouveau langage de programmation expérimental. Les opérations de compilation sont presque instantanées, et le code compilé propose une vitesse de fonctionnement proche de celle du C ».
- 2009 publication
- Auteur : entre autre, Ken Thompson inventeur de l’unix
- Information importante au niveau du nom : les recherches avec le mot clé “Go” ne sont pas pertinente dans les moteurs de recherche. Par convention, il faut utiliser “Golang” pour faire des recherches, le tag twitter est #golang…
Pourquoi/Motivation de la création de Golang ? [ref]
- Les développeurs de chez Google ont fait le constat qu’il existe des langages qui ont les caractéristiques suivantes :
- soit avec une compilation efficace (rapide)
- soit avec une exécution efficace
- soit avec une facilité de développement
mais qu’il n’existe pas de langage avec ces trois caractéristiques réunies, d’où l’idée du lancement du projet Go.
- Le but de ce langage est de faire le lien entre le monde des langages compilés et les langages interprétés.
- Avoir une compilation rapide (très rapide) est un élément très important du cahier des charge du langage, car la compilation de gros projets chez Google prend beaucoup de temps (« To make matters worse, build times, even on large compilation clusters, have stretched to many minutes, even hours. »)
- Gestion des modules très simplifié par rapport au C : « Go provides a model for software construction that makes dependency analysis easy and avoids much of the overhead of C-style include files and libraries. »
- Langage simple et stupide, pas de subtilités
- Simplicité de déploiement (exemple Gogs qui est un gitlab/github like)
Quels sont les projets cibles, les développeurs cible du langage Go ?
- Au départ : les développeurs systèmes C, C++ étaient la cible du langage Go
- J’ai pu observer et en faire l’expérience que les développeur Python sont très rapidement opérationnels en Go et apprécient le langage
- En pratique : beaucoup de développeur Ruby, Python, Php s’intéressent/migrent des projets vers ce langage.
- Pour le moment, le langage Go est principalement adapté à des projets backend
Les forces du langage Golang
- En pratique, les projets développés en Go ont de très bonnes performance, cela pour plusieurs raison :
- Faible consommation mémoire
- Rapide car c’est un langage compilé
- Les fonctionnalités de concurrences directement intégré au langage
- Go a un système de type statique, fortement typé mais permet aussi d’avoir un typage dynamique grâce aux interfaces
- Gestion propre de la parallélisation sur un ou plusieurs coeurs
- Go permet de faire facilement de la cross compilation
- Facilité de déploiement
- Les « batteries sont incluses » (la librairie standard du langage est riche)
- Facilité d’apprentissage du langage (pas de concept nouveau pour faciliter l’adoption)
- Communauté très active et de bon niveau
Spécificité du langage et sa syntax
- Grandes particularités du langage Golang :
- Gestion de la concurrence en natif, au coeur du langage avec l’instruction « go »
- Programmation objet par composition et non pas par héritage
- La gestion des erreurs ne se fait pas par exception mais par l’utilisation d’un second paramètre retourné par les fonctions
Gestion des packages / modules
- Instruction package. Un package peut être codé dans plusieurs fichiers librement.
- Majuscule pour exporter les noms de fonctions
- « go get … » permet d’installer une librairie depuis Internet
- pas de gestion de version (suggest : utilisation de git subtree)
- Comment trouver des librairies Go (un Python Index ou RubyGems like) ?
- Équivalent à virtualenv python : GOPATH
Comment apprendre le langage et se documenter :
- Il ne faut pas oublier de faire les recherches avec le mot clé “golang”
- « A tour of Go » très bien pour apprendre la syntax, le langage de base, sans rien installer, directement dans le browser
- Plein d’exemple de code : https://gobyexample.com/
- « Go Bootcmap »
- Aller plus loin : « Effective Go »
- Le code source des librairies internes de Go sont assez simple à lire, exemple : http://golang.org/src/pkg/net/http/response.go
Ce que j’aime avec dans le langage Golang
- « explicite better implicite »
- les outils inclus avec la commande « go »
- les tests
- couverture de code
- go benchmark
- go get
- rapidité, peu d’emprunte mémoire
- la gestion des import, ressemble énormément du Python
- simplicité de déploiement :
- exemple : https://github.com/gogits/gogs (Github/gitlab like), un fichier à déposer sur le serveur, c’est parti (en dehors de la conf postgresql), pas de runtime
Ce que j’aime pas dans le langage Golang
- Pour moi, c’est quand même beaucoup plus rapide de coder en Python
- La gestion des retour d’erreur partout, c’est pénible
- À cause de la gestion d’erreur, il est souvent impossible d’enchainer des appels de fonctions
- Moins de lisibilité que Python
- Pour le moment, pas de solution mature pour créer des applications loudes, type Qt…
Adoption et des success stories
- on trouve beaucoup de feedback sur :
- sociétés qui utilisent Golang
- success story
Question coopérative :
Comment se passe la négociation salariale ?
C’est un peu magique le Go: une syntaxe légère avec des performances proche du C 0_0
En php, on peu retourner plusieurs variables via un tableau:
——–
Function exple(){
return array($a,$b);
}
list($a,$b)=exple();
——–
J’ai testé un peu sur http://golang.org/
Je trouve ça sympa qu’il ne compile pas si on a des variables non utilisés: visualstudio fait de même pour information 😉
Attention pour python : préfixé d’un ou de deux underscore est une convention de nommage: il n’y a pas de « portée/protection » de variable, cf nos derniers échanges sur le sujet (précédent nipDev)
En entreprise on privilégie: la productivité de développement et la difficulté de maintenance: on privilégie l’économie de l’homme au dépend de la machine 😉 (les jours H étant plus élevé que les coûts machine ) 🙂
Merci pour cet épisode qui m’a fait découvrir un peu mieux GO 😉
> Question coopérative :
> Comment se passe la négociation salariale ?
Je pense qu’il n’y a pas de règles, chaque Scop fonctionne comme elle le souhaite.
> En php, on peu retourner plusieurs variables via un tableau
Oui parfaitement, mais c’est pas exactement pareil. Mais ce sont des détails.
> Je trouve ça sympa qu’il ne compile pas si on a des variables non utilisés: visualstudio fait de même pour information 😉
Mais là c’est directement lié au langage, ce n’est pas une option, c’est vraiment une erreur si une variable n’est pas utilisé.
> Attention pour python : préfixé d’un ou de deux underscore est une convention de nommage: il n’y a pas de « portée/protection » de variable, cf nos derniers échanges sur le sujet
Si si il y a une protection (que tu peux contourner) au niveau des attribues ou méthodes avec double underscore, exemple https://gist.github.com/harobed/5493d9e967f84e4ce0d3
> En entreprise on privilégie: la productivité de développement et la difficulté de maintenance: on privilégie l’économie de l’homme au dépend de la machine 😉 (les jours H étant plus élevé que les coûts machine ) 🙂
Oui tout à fait d’accord.
> Merci pour cet épisode qui m’a fait découvrir un peu mieux GO 😉
De rien.
Merci de votre retour
Pour python j’ai deux sons de cloche 🙁
Cf mon échange lors du dernier épisode sur python:
http://nipcast.com/nipdev-22-holy-python/#comments
Il dit la même chose dans son code d’exemple. Tu peux « proteger » les attributs avec un double underscore mais tu peux contourner via _MaClasse__attribut. Après je considère juste qu’un attribut privée qui peut être accessible, n’est pas privé. Tous les attributs python sont bien publics et accessibles d’une manière ou d’une autre.
On est bien d’accord ce n’est pas une protection mais une convention de protection 😉
Je t’en rajoute une couche : http://broken.build/2011/07/21/private-protected-and-public-in-python/ 😀
Oui merci, je lis bien « Protected member is (in C++ and Java) accessible only from within the class and it’s subclasses. How to accomplish this in Python? The answer is – by convention. »
C’est une convention non une protection 🙂
En php on pourrait faire de même: mettre toutes les variables en public et préfixer les protected et private d’un underscore en indiquant bien que par convention elles sont publics 😉
Mais on a une protection qui génerera une erreur si on essaie d’acceder à une propriété protected/private hors de son « scope » 😉
J’aime bien son humour: « This will work, except, in case you see this, you kick your colleague, who’s responsible for it hard in the nuts. »