Salut,
Ça fait un peu plus d’un an que je fais du Go quotidiennement au boulot.
Alors, à gros trait et en prenant quelques raccourcis :
à quel type de projets est-il destiné ?
Il est essentiellement utilisé côté backend et infrastructure dans le cloud. Mais aussi pour des outils en ligne de commande (je pense au client kubectl
pour Kubernetes, notamment, ou même le client gcloud
pour interagir avec le cloud de Google). On le retrouve utilisé pour implémenter des proxies/gateways (Traefik est un concurrent à NGINX), des systèmes de bases de données (comme etcd), en plus des projets plus classiques de serveurs applicatifs.
Quels langages sont voués à être progressivement remplacés par Go ?
Il fait une grosse concurrence à Node/Python/Ruby/PHP côté backend, en effet, mais je dirais qu’il joue surtout dans la même cour que C# et Java, comme langage d’entreprise (i.e qui réduit les coûts, en perfs comme en facilité d’apprentissage et de maintenance, et limite la dette technique "par accumulation de code qui ralentit l’ensemble"), avec l’avantage de compiler en natif et donc générer des images beaucoup plus légères.
Il était originellement annoncé comme orienté système, mais semble aujourd’hui ce concentrer davantage vers du web.
Système, non : parmi les langages modernes Rust et Zig visent ce segment avec beaucoup plus de légitimité que Go, mais cironscrire Go juste au web c’est un peu réducteur. Aujourd’hui il est utilisé surtout pour écrire des serveurs et des applications distribuées, mais qui sait pour quoi il le sera à moyen terme ? Par exemple, le support des generics est prévu pour la release 1.17 au mois d’août cette année : cette feature peut avoir un impact gigantesque sur le nombre de projets qui vont adopter le langage, et en ce sens, peut-être changer l’équilibre des domaines d’applications de Go, parce que c’est une de ses fonctionnalités les plus demandées et attendues, et qu’elle va bouleverser pas mal de trucs dont la bibliothèque standard. Dans ces conditions, il est difficile de prédire ce que sera le langage dans 1 an.
Perso, je sais que les generics me donnent envie d’essayer de coder quelque chose de différent, comme un jeu, ou un moteur d’ECS… il y a tellement de possibilités ouvertes par ce mécanisme, y compris dans des domaines un peu tatillons en performances (les generics pourraient nous aider à écrire des structures de données qui soulagent le Garbage Collector dans les portions critiques du code, par exemple), que ce serait dommage de ne pas les explorer.
Ce qui est sûr, c’est que les technos qui sont développées avec (Docker, Kubernetes, etcd, traefik…) sont plutôt centrales, donc là pour rester un moment.
Edit : actuellement, l’assurance-vie de Go, c’est qu’il est utilisé dans la plupart des softs de la Cloud Native Initiative, et donc qu’il occupe une place de choix dans les grosses infrastructures de demain. Typiquement, les alternatives à Docker qui respectent le même standard, comme podman
, sont souvent aussi écrites en Go.
Je le verrais bien utilisé dans l’enseignement, aussi.