


Introduction à l'utilisation de go get pour la gestion des packages dans les modules go
Gestion des packages sous module
Tout d'abord, nous avons introduit go mod edit pour modifier go.mod, mais il a deux défauts :
1. Premièrement, son -require doit accepter le formulaire "package@version", ce qui est indispensable, et il ne peut pas reconnaître les drapeaux maître et les plus récents spécifiés dans le document.
2. Deuxièmement, edit ne convient que pour modifier les versions de dépendances, renommer des packages et bloquer des packages spécifiques. Il ne convient pas pour ajouter des dépendances.
La bonne nouvelle est que go get a désormais la possibilité d'ajouter/modifier/mettre à jour des packages dans des modules.
Pour profiter pleinement des modules go, nous devons sélectionner un répertoire autre que GOPATH et définir GO11MODULE=on. De cette façon, l'utilisation de go get n'affectera que le module principal actuel et ne polluera pas GOPATH.
Nous clonons le projet sur un chemin non-GOPATH, puis utilisons
go mod init [project name]
pour initialiser le module. Répertoire initialisé :
Pour le moment, go.mod est toujours vide. Nous savons que go build mettra à jour go.mod, nous allons donc d'abord build
Par défaut, go get sera utilisé pour obtenir le dernier package. Maintenant, go.mod a été mis à jour et le projet a été compilé avec succès. C'est la signification de go.mod :
.module schanclient require ( github.com/PuerkitoBio/goquery v1.4.1 github.com/andybalholm/cascadia v1.0.0 // indirect github.com/chromedp/chromedp v0.1.2 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d // indirect )
indirect Cela signifie que ce package dépend du sous-module/package, mais que le module principal n'est pas directement importé et utilisé, ce qu'on appelle la référence indirecte.
Habituellement, go.mod peut bien terminer la gestion des packages en utilisant le comportement par défaut, mais il y a toujours quelques exceptions dans la vie.
Nous voyons que chromedp utilise la version 0.1.2, qui est la version d'il y a trois mois. La dernière validation a eu lieu le mois dernier. La modification du mod Go doit spécifier clairement le numéro de version ou l'heure de validation + la somme de contrôle. gênant et pas ce que nous voulons.
Alors, comment pouvons-nous utiliser la dernière version au lieu des dernières balises ?
Ou peut-être que nous ne voulons pas la dernière version et avons besoin d’une version spécifique du package ?
Voici le contenu de la sélection des versions.
Nouvelles fonctionnalités de go get - sélection de version
Il y avait une solution comme gopkg.in+go get, mais la nouvelle La sélection de version prise en charge par go get est une extension supplémentaire de cette solution. Regardez quelques règles :
go get téléchargera et installera automatiquement le package, puis le mettra à jour vers go.mod
<🎜. >Oui Utilisez go get package[@version] pour installer la version spécifiée du package Lorsque la version n'est pas spécifiée, le comportement par défaut est le même que go get package@latestLa version peut être sous la forme. de vx.y.z ou utiliser directement la somme de contrôle de validation. Elle peut également être master ou LatestLorsque la version est la plus récente, c'est le comportement par défaut pour les packages avec des balises, la dernière balise sera sélectionnée. tags, le dernier commit< sera sélectionné 🎜>Lorsque la version est master, que le package soit balisé ou non, le dernier commit de la branche master sera sélectionné
Vous pouvez utiliser >. ;, >=, <, <= avant la version pour indiquer la sélection. La version ne doit pas dépasser/inférieure à la version. Dans cette plage, la version qui répond aux dernières conditions
go get -u peut être mise à jour. le package vers la dernière version
go get -u=patch ne mettra à jour que la dernière version, par exemple de la v1.2.4 à la v1.2.5
Lorsque vous souhaitez modifier la version du package , il vous suffit d'aller chercher package@specified version
Ensuite, nous voulons changer chromedp Il est facile d'utiliser la dernière version :
go get github.com/chromedp/chromedp@master
Maintenant, chromedp a été mis à jour dans go.mod :
module schanclient require ( github.com/PuerkitoBio/goquery v1.4.1 github.com/andybalholm/cascadia v1.0.0 // indirect github.com/chromedp/chromedp v0.1.3-0.20180717231922-bf52fed0d3e6 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d // indirect )
Et si nous voulons ajouter des packages supplémentaires maintenant ?
Utilisez simplement go get directement. Par exemple, je souhaite utiliser gorm pour stocker des données dans la base de données :
go get github.com/jinzhu/gorm
Le go.mod mis à jour
module schanclient require ( github.com/PuerkitoBio/goquery v1.4.1 github.com/andybalholm/cascadia v1.0.0 // indirect github.com/chromedp/chromedp v0.1.3-0.20180717231922-bf52fed0d3e6 github.com/jinzhu/gorm v1.9.1 // indirect github.com/jinzhu/inflection v0.0.0-20180308033659-04140366298a // indirect golang.org/x/net v0.0.0-20180826012351-8a410e7b638d // indirect )
Nous voyons le dernier. version Le gorm a été ajouté, bien sûr car nous ne l'avons pas importé dans le module principal, il est donc indirect.
Si nous voulons utiliser la v1.9 gorm :
go get github.com/jinzhu/gorm@v1.9
Malheureusement, la sélection de version se fait de la version majeure à la version mineure. S'il y a la v1.9 et la v1.9.1, alors. quand Lorsque vous spécifiez v1.9, la version avec le numéro de version mineure le plus élevé sera automatiquement sélectionnée, sauf s'il n'y a pas d'autre balise v1.9.z à l'exception de la v1.9, qui est v1.9.1 dans ce cas.
Un autre point à mentionner est que go build et go test n'ajouteront que les packages qui ne sont pas dans go.mod et n'écraseront ni ne modifieront les règles introduites par go get, il n'y a donc pas lieu de s'inquiéter à leur sujet. contradictoire.
Pensez-vous que cela ressemble à venv+pip ? Oui, cela montre que les outils de gestion de paquets de go deviennent progressivement modernes.
En ce qui concerne le blocage des packages, la suppression de packages et le renommage des packages (tels que les packages inaccessibles sur golang.org/x/...), ce sont les fonctions de go mod edit. Pour plus de détails, veuillez consulter go help mod. modifier .
Recommandé :
tutoriel de langue goCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Dans Go, le cycle de vie de la fonction comprend la définition, le chargement, la liaison, l'initialisation, l'appel et le retour ; la portée des variables est divisée en niveau de fonction et au niveau du bloc. Les variables d'une fonction sont visibles en interne, tandis que les variables d'un bloc ne sont visibles que dans le bloc. .

Dans Go, les messages WebSocket peuvent être envoyés à l'aide du package gorilla/websocket. Étapes spécifiques : Établissez une connexion WebSocket. Envoyer un message texte : appelez WriteMessage(websocket.TextMessage,[]byte("message")). Envoyez un message binaire : appelez WriteMessage(websocket.BinaryMessage,[]byte{1,2,3}).

Dans Go, vous pouvez utiliser des expressions régulières pour faire correspondre les horodatages : compilez une chaîne d'expression régulière, telle que celle utilisée pour faire correspondre les horodatages ISO8601 : ^\d{4}-\d{2}-\d{2}T \d{ 2}:\d{2}:\d{2}(\.\d+)?(Z|[+-][0-9]{2}:[0-9]{2})$ . Utilisez la fonction regexp.MatchString pour vérifier si une chaîne correspond à une expression régulière.

Go et le langage Go sont des entités différentes avec des caractéristiques différentes. Go (également connu sous le nom de Golang) est connu pour sa concurrence, sa vitesse de compilation rapide, sa gestion de la mémoire et ses avantages multiplateformes. Les inconvénients du langage Go incluent un écosystème moins riche que les autres langages, une syntaxe plus stricte et un manque de typage dynamique.

Les fuites de mémoire peuvent entraîner une augmentation continue de la mémoire du programme Go en : fermant les ressources qui ne sont plus utilisées, telles que les fichiers, les connexions réseau et les connexions à la base de données. Utilisez des références faibles pour éviter les fuites de mémoire et ciblez les objets pour le garbage collection lorsqu'ils ne sont plus fortement référencés. En utilisant go coroutine, la mémoire de la pile de coroutines sera automatiquement libérée à la sortie pour éviter les fuites de mémoire.

Consultez la documentation de la fonction Go à l'aide de l'EDI : passez le curseur sur le nom de la fonction. Appuyez sur la touche de raccourci (GoLand : Ctrl+Q ; VSCode : Après avoir installé GoExtensionPack, F1 et sélectionnez « Go:ShowDocumentation »).

Les tests unitaires des fonctions simultanées sont essentiels car cela permet de garantir leur comportement correct dans un environnement simultané. Des principes fondamentaux tels que l'exclusion mutuelle, la synchronisation et l'isolement doivent être pris en compte lors du test de fonctions concurrentes. Les fonctions simultanées peuvent être testées unitairement en simulant, en testant les conditions de concurrence et en vérifiant les résultats.

Dans Golang, les wrappers d'erreurs vous permettent de créer de nouvelles erreurs en ajoutant des informations contextuelles à l'erreur d'origine. Cela peut être utilisé pour unifier les types d'erreurs générées par différentes bibliothèques ou composants, simplifiant ainsi le débogage et la gestion des erreurs. Les étapes sont les suivantes : Utilisez la fonction error.Wrap pour envelopper les erreurs d'origine dans de nouvelles erreurs. La nouvelle erreur contient des informations contextuelles de l'erreur d'origine. Utilisez fmt.Printf pour générer des erreurs encapsulées, offrant ainsi plus de contexte et de possibilités d'action. Lors de la gestion de différents types d’erreurs, utilisez la fonction erreurs.Wrap pour unifier les types d’erreurs.
