web-dev-qa-db-fra.com

Go Modules: Trouver la version du paquet requis

J'essaye les modules Go. Mon projet nécessite le golang.org/x/net/html libarary. J'ai donc défini ce fichier go.mod:

module github.com/patrickbucher/prettyprint

require golang.org/x/net/html

Et écrit ce programme de démonstration pour vérifier si la dépendance est chargée lors de la compilation:

package main

import (
        "fmt"
        "log"
        "os"

        "golang.org/x/net/html"
)

func main() {
        doc, err := html.Parse(os.Stdin)
        if err != nil {
                log.Fatal(err)
        }
        fmt.Println(doc)
}

Lorsque je lance go build, je reçois ce message d'erreur:

go: errors parsing go.mod:
~/prettyprint/go.mod:3: usage: require module/path v1.2.3

Évidemment, j'ai raté le numéro de version. Mais lequel prendre? Je suis tombé sur un article intitulé Takig Go Modules pour Spin , où j'ai trouvé un exemple de fichier go.mod contenant des références à des packages golang.org/x:

module github.com/davecheney/httpstat

require (
        github.com/fatih/color v1.5.0
        github.com/mattn/go-colorable v0.0.9
        github.com/mattn/go-isatty v0.0.3
        golang.org/x/net v0.0.0-20170922011244-0744d001aa84
        golang.org/x/sys v0.0.0-20170922123423-429f518978ab
        golang.org/x/text v0.0.0-20170915090833-1cbadb444a80
)

L'auteur utilise des chaînes de version telles que v0.0.0-20170922011244-0744d001aa84, composées de l'indication semver v0.0.0, d'un horodatage et de quelque chose qui ressemble à un ID de validation git.

Comment puis-je comprendre ces chaînes de version? Je suppose que ces paquets golang.org/x seront versionnés à un moment donné conformément à la version sémantique, mais pour vraiment essayer go mod, je dois trouver ces maintenant.

5
Patrick Bucher

Maintenant, je lis un peu plus loin dans la documentation (go help modules) et tombé sur go mod tidy:

La commande 'go mod tidy' crée cette vue, puis ajoute les fichiers manquants exigences du module et supprime les inutiles.

Donc, quand je laisse l'exigence sur golang.org/x/net/html et élaguer mon fichier go.mod à ceci:

module github.com/patrickbucher/prettyprint

Et puis exécutez go mod tidy, puis l'exigence avec le numéro de version est correctement calculée en fonction de le chemin d'importation dans mon code source , et donc go.mod devenant:

module github.com/patrickbucher/prettyprint

require golang.org/x/net v0.0.0-20180906233101-161cd47e91fd

Maintenant, go list et go build fonctionnent.

1
Patrick Bucher

Une version du formulaire v0.0.0-20180906233101-161cd47e91fd signifie qu'il n'y a pas de version marquée dans le référentiel git. Donc, go mod en génère un en fonction de la dernière heure de validation et du préfixe du hachage de validation.

Pour obtenir un fichier go.mod correct, commencez à l’aide de la commande suivante (en supposant que go 1.11):

go mod init yourmodulename

Ou créez un fichier go.mod vide qui ne contient que:

module yourmodulename

puis exécutez go mod tidy, cela trouvera toutes les dépendances, ajoutera les manquantes et supprimera les dépendances inutilisées.

3
nijm