Maison >développement back-end >Golang >Comment les modules Go gèrent-ils les packages internes pour empêcher les importations externes ?
Comprendre les packages internes
Packages internes, désignés par le répertoire "interne" , sont destinés au regroupement du code associé qui ne doit pas être exposé en dehors du projet. Dans les modules Go, les packages internes ne peuvent pas être importés par des projets externes.
Structure du module
Dans l'exemple fourni, la structure du projet est la suivante :
project/ internal/ foo/ foo.go # package foo bar/ bar.go # package bar main.go
où main.go importe les packages internes project/internal/foo et project/internal/bar.
Importer Problème
Le problème que vous avez rencontré était la tentative d'importation de packages internes depuis l'extérieur du répertoire du projet. Les packages internes ne peuvent être importés qu'à partir du même projet, donc utiliser les chemins project/internal/foo et project/internal/bar depuis main.go ne fonctionnerait pas.
Solution avec les modules Go
Cependant, avec l'introduction des modules Go dans Go v1.11, il n'est plus nécessaire de spécifier le chemin de votre projet dans $GOPATH/src. Créez un fichier go.mod et définissez les modules internes du package comme suit :
project/ go.mod main.go \---internal +---bar | bar.go | go.mod | \---foo foo.go go.mod
project/internal/bar/go.mod
module bar go 1.14
project/internal/bar/bar.go
package bar import "fmt" // Bar prints "Hello from Bar" func Bar() { fmt.Println("Hello from Bar") }
project/internal/foo/go.mod
module foo go 1.14
project/internal/foo/foo.go
package foo import "fmt" // Foo prints "Hello from Foo" func Foo() { fmt.Println("Hello from Foo") }
project/main.go
package main import ( "internal/bar" "internal/foo" ) func main() { bar.Bar() foo.Foo() }
project/go.mod
module project go 1.14 require internal/bar v1.0.0 replace internal/bar => ./internal/bar require internal/foo v1.0.0 replace internal/foo => ./internal/foo
Clé Points
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!