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.
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.
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.