Je me demande si tout le monde se rend bien compte ici que l’on est en train d’orienter un débutant dont le stage imminent touche au domaine du web, vers un langage système notoirement connu pour être difficile à apprendre et à manipuler efficacement ?
Je me permets de rééquilibrer la balance parce que même s’il est beaucoup moins sexy sur le papier que Rust (ce que j’admets volontiers), et qu’il ne répond pas à un idéal académique, on ignore souvent ce qui a poussé des gens comme Ken Thompson et Rob Pike à développer Go : le vrai monde, c’est-à-dire la réalité du développement, qui comprend la facilité à déployer, la gestion des dependances dans une codebase qui grossit, la vitesse du build de tout un projet sur un système d’intégration continue, et le fait que le temps de cerveau d’un développeur coûte beaucoup plus cher à l’entreprise que celui du CPU d’un ordinateur. Toutes ces problématiques ont été prises en considération jusque dans le design du langage, pas seulement son modèle de concurrence !
D’abord, il est notoire que le plus gros de l’écosystème de Go et donc son domaine d’application usuel, contrairement à celui de Rust, c’est le backend des services web ! Il n’y a qu’à consulter la liste des packages disponibles dans cet écosystème pour s’en apercevoir, et ça n’a rien d’étonnant puisque le langage est développé par Google.
Go a été pensé pour être versatile, à l’image de Python (c’est-à-dire modelable et très rapide à développer), en proposant notamment un modèle de concurrence basé sur l’idée il faut communiquer pour pouvoir coopérer, pas l’inverse. Ce que ce modèle a de particulièrement intéressant (et ce qui fait toute son élégance), c’est qu’il est simple à comprendre, à appréhender, immédiat à appliquer, et qu’une fois bien compris il permet de se passer de milliards de contraintes formelles pour rendre la programmation concurrente possible sans se péter les dents : il s’agit d’apprendre à penser son problème correctement plutôt que d’obéir à un compilateur qui le fait pour nous de façon rigide, ce que je trouve personnellement beaucoup plus enrichissant. Les autres idées qui ont poussé le développement de Go sont sa vitesse de compilation (parce qu’à la longue, sur de vrais gros projets, ça devient un vrai facteur limitant), et le fait qu’il incite les developpeurs à vraiment produire du code modulaire. Renseignez-vous sur le pourquoi du comment de ce langage (les articles de google sont légion à ce sujet) avant de dire des bêtises du style Go n’apporte rien en dehors des goroutines, ou de le snober pour manque d’académisme. Le système packages dont Rust s’ennorgueillit, Go en avait apporté tous les avantages 10 ans plus tôt !
Pour finir, je n’ai vraiment rien contre Rust et je trouve que c’est un langage très intéressant, mais à la fin de son stage qui va durer grand max 6 mois, peut-être que le PO voudra avoir accompli autre chose qu’apprendre à utiliser son langage de programmation, non ?