Go est devenu célèbre comme l'un des langages de programmation les plus simples, y compris ses avantages - facilité d'écriture et de lecture de code, dans la plupart des cas, prise en charge plus simple de la base de code. Nous parlons de plusieurs avantages de Go, grâce auxquels nous, chez SimbirSoft, l'avons utilisé dans un certain nombre de projets très chargés avec diverses architectures, à la fois sur le Web et de micro-services (SOA).
Candidature
Ce langage système convient à la plupart des tâches réseau, à tous les microservices et services macro, aux services Web, ainsi qu'aux outils système - ce n'est pas sans raison que de nombreux experts DevOps l'adorent. Go trouve son utilisation dans le Machine Learning, et certains développeurs écrivent même des sites Web avec lui. Dans notre pratique, nous nous sommes tournés vers Go lorsque nous avons développé des CRM et des produits logiciels séparés pour un usage interne, par exemple pour les compagnies d'assurance. Le référentiel de langue Go standard a également un package pour le développement mobile, ce package est toujours pris en charge, bien qu'il existe des outils plus appropriés pour cela.
Go: développement et reconnaissance
Chez Google, le développement du langage Go a commencé en 2007. Avant cela, la société utilisait Java, Python et C ++, cependant, ils présentaient certains inconvénients (en particulier, une consommation de mémoire élevée) ou une utilisation limitée. Ensuite, Google a commencé à développer une nouvelle langue pour leurs besoins.
Quelles sont les exigences pour la langue:
- Un fichier exécutable (pas de dépendances)
- Compilation rapide
- Exécution rapide (au moins comparable à Java et C ++)
- Garbage collector minimisant les fuites de ressources
- Optimisation pour les systèmes multiprocesseurs
- Typage statique
- Minimalisme
- Légèreté syntaxique
- Multiparadigmité (impératif, fonctionnel, orienté objet)
Pour ceux qui ne travaillent pas avec Go, rappelez brièvement l'histoire de sa création. Google a commencé à réfléchir à la spécification linguistique en 2007. La version 1.0 a eu lieu en 2012 et en 2015 la version 1.5 a été publiée, déjà sans une seule ligne de code C ++. A partir de ce moment, le langage se compile, ce qui nous a permis d'accélérer le développement de tâches individuelles sur Go.
L'âge moyen de reconnaissance d'une nouvelle langue dans la communauté est d'environ 10 ans, mais le go est déjà l'une des langues les plus populaires. En juin 2019, Go a grimpé au 15e rang en termes de popularité dans le monde, selon l'indice
TIOBE , ajoutant trois positions en un an. Les raisons de son succès sont les suivantes:
- Bibliothèque standard solide
- Réglage standard cool
- Les fonctions les plus nécessaires sont présentées dans la «boîte», et les bibliothèques sont données à l'open source
- Communauté très sympathique
Par exemple, les packages suivants sont inclus dans la bibliothèque standard (la liste est incomplète):
Illustration - github.com/ashleymcnamara/gophersSi vous n'êtes pas à l'aise avec la vitesse de votre application ou d'autres paramètres, vous pouvez travailler avec le profileur hors de la boîte. Pour ce faire, vous avez besoin de:
- Enregistrer l'importation du profileur: import _ "net / http / pprof"
- Ajoutez un serveur http pour recevoir les résultats du profileur: allez http.ListenAndServe ("0.0.0.0:8080", nil)
Outils Go
L'un des avantages de Go est son vaste ensemble d'outils standard. Nous avons sélectionné certains des utilitaires les plus intéressants, à notre avis (en fait, il y en a beaucoup plus):
- benchcmp - comparaison de référence, performances avant et après modifications
- go tool cover - analyse de la couverture du code par des tests
- godoc - génération de documentation basée sur les commentaires
- goimports - analyse des importations (suppression des éléments inutilisés, ajout des éléments manquants)
- gorename - refactoring
- présent - réglage de la présentation
- go vet - linter d'erreur fréquemment rencontré
- go test - exécuter des tests et des tests de performance
- go fix - corrige les changements lors du changement d'API (avant la version 1.0)
- go tool pprof - profilage
- Go fmt - mise en forme du code par style de code
- Détecteur de course - trouver une course de données en runtime
La compétitivité
Une autre force de Go est qu'il est facile d'écrire du code compétitif dans cette langue. Pour ce faire, vous utilisez simplement des mots clés avant d'appeler la fonction.

Go Training
Si vous souhaitez programmer sur Go, le démarrage prendra relativement peu de temps. Les développeurs - Core Team - prennent en charge le cours A Tour of Go en plusieurs langues, dont le russe. Ce cours peut être complété en seulement 1-3 jours. En termes d'apprentissage, le go est l'une des langues les plus simples.
Alors quoi lire:
ORM in Go
On pense que l'une des faiblesses de Go est ORM. Cela est peut-être dû en partie au fait que la langue est jeune - en elle, de nombreux outils nécessaires commencent tout juste à être développés. En particulier, vous pouvez utiliser le package database / sql pour travailler avec des bases de données. Quelles sont les exigences pour le package:
- Package général pour toutes les bases de données SQL
- Portable: ne contient aucune fonctionnalité dans le domaine de l'utilisation des bases de données. Idéalement, tout devrait fonctionner correctement si vous changez de pilote.
- Conversion de types Go en types de base de données standard (il devrait être possible de traiter des types spécifiques)
- Contient un pool de connexions
- Sécurité des fils pour les goroutines
Exemple de requête SELECT utilisant une base de données / sql
defer rows.Close() for rows.Next() { var message string err := rows.Scan(&message) if err != nil { log.Panic(err) } fmt.Println(message) } if err := rows.Err(); err != nil { log.Panic(err) }
Comme vous pouvez le voir dans l'exemple, de nombreuses actions de modèle devront être effectuées à chaque fois. Par exemple:
- objet de ligne fermée: différer les lignes.Fermer ()
- vérifier les erreurs err: = row.Err (); euh! = nul depuis on ne sait pas pourquoi les lignes.Next () nous a renvoyé faux
De tout cela, je veux utiliser quelque chose de plus universel et simple, par exemple, ORM.
Types d'implémentations ORM
Lorsque les développeurs sont confrontés au choix de l'ORM pour travailler avec Go, ils sont souvent guidés par la note sur le github. Lorsque nous avons choisi ORM pour nous-mêmes, Beego avait la meilleure note (18 000 «étoiles»). Cependant, dans la pratique, l'ORM fait partie du cadre, donc l'évaluation n'est pas tout à fait objective (si vous ne sélectionnez que l'ORM). Parmi les leaders, Gorm, qui se développe depuis 2013, prend en charge les transactions et présente de nombreux autres avantages.

Cependant, comme notre expérience avec Gorm l'a montré, certains problèmes sont possibles lors de son utilisation, en particulier lors des tests: par exemple, la course aux données ou la suppression d'une clé étrangère. Nous pouvons supposer les causes suivantes de ces erreurs dans Gorm:
- S'engage immédiatement en master
- Balises manquantes
- Constructeur SQL imprévisible
Pour le moment, dans notre travail, nous préférons plusieurs ORM qui n'utilisent pas l'interface {} - ce sont Kallax, Reform et Sqlboiler. Nous utilisons généralement le package
Golang pour les migrations et le référentiel
orm-bench avec les
tests ORM on Go. Dans le même temps, vous ne devez pas chasser uniquement les repères. Plus souvent, la vitesse n'est pas aussi importante que la qualité du code et sa fonctionnalité.
Pour résumer
Les avantages du langage Go pour le développeur et pour les entreprises incluent une productivité de développement accrue, la possibilité d'utiliser moins de serveurs, la facilité syntaxique et un temps de formation plus rapide pour les nouveaux développeurs, un large éventail d'outils et une communauté conviviale. Malgré le fait qu'il s'agit d'une langue jeune, elle ne cesse de croître et de se développer. Les fonctionnalités de Go en font le langage optimal pour une grande variété de projets, des tâches réseau aux microservices et à la blockchain.
L'article a été préparé sur la base de notre rapport lors de la réunion Hot Backend à Samara.