Maison  >  Article  >  développement back-end  >  Introduction à l'utilisation de go get pour la gestion des packages dans les modules go

Introduction à l'utilisation de go get pour la gestion des packages dans les modules go

尚
avant
2019-11-30 14:18:132609parcourir

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é :

Introduction à lutilisation de go get pour la gestion des packages dans les modules go

Pour le moment, go.mod est toujours vide. Nous savons que go build mettra à jour go.mod, nous allons donc d'abord build

Introduction à lutilisation de go get pour la gestion des packages dans les modules go

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@latest

La 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 Latest

Lorsque 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

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 >. ;, >=,

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 go

Ce 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer