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!