J'essaie le nouveau système de modules de Go et je ne parviens pas à accéder aux packages locaux. Le projet suivant est dans un dossier sur mon bureau en dehors de mon gopath.
Ma structure de projet ressemble à:
/
- /platform
- platform.go
- main.go
- go.mod
// platform.go
package platform
import "fmt"
func Print() {
fmt.Println("Hi")
}
// main.go
package main
import "platform"
func main() {
platform.Print()
}
go build main.go
me dit
cannot find module for path platform
Je vous suggère fortement d'utiliser la chaîne d'outils go qui prend en charge ces problèmes immédiatement. Le code Visual Studio avec le plug-in vscode-go est vraiment utile.
Le problème ici est que Go nécessite des chemins relatifs par rapport à votre instruction $GOPATH/src
ou module
dans l'import. Selon l'endroit où vous vous trouvez dans votre GOPATH
, le chemin d'importation doit également l'inclure. Dans ce cas, l'instruction d'importation doit inclure le chemin du module go dans go.mod
GOPATH
Supposons que votre projet réside ici:
$GOPATH/src/github.com/myuser/myproject
Votre chemin d'importation devrait être:
import "github.com/myuser/myproject/platform"
VGO
Supposons que votre fichier go.mod est:
module example.com/myuser/myproject
Votre chemin d'importation devrait être:
import "example.com/myuser/myproject/platform"
Permettez-moi de définir ce premier modules
sont des collections de packages
. Dans Go 11, j'utilise modules go comme suit:
Si les deux packages sont dans le même projet, vous pouvez simplement procéder comme suit: Dans go.mod
:
module github.com/userName/moduleName
et à l'intérieur de votre main.go
import "github.com/userName/moduleName/platform"
Toutefois, s’il s’agit de modules distincts, c’est-à-dire différents chemins physiques et que vous souhaitez toujours importer le fichier local packages
sans le publier à distance dans github, par exemple, vous pouvez utiliser la directive replace
.
Étant donné le nom du module github.com/otherModule
et platform
, comme vous l'avez appelé, est le seul paquet à l'intérieur. Dans le go.mod
de votre module principal, ajoutez les lignes suivantes:
module github.com/userName/mainModule
require "github.com/userName/otherModule" v0.0.0
replace "github.com/userName/otherModule" v0.0.0 => "local physical path to the otherModule"
Remarque: le chemin doit pointer vers le répertoire racine du module et peut être absolu ou relatif.
Dans main.go
, pour importer un package spécifique tel que platform
à partir de otherModule
:
import "github.com/userName/otherModule/platform"
Voici une introduction douce aux modules de Golang