Maison > Article > développement back-end > Pourquoi l'importation d'un fichier à partir d'un sous-dossier entraîne-t-elle une erreur « non définie » dans Go, et comment les modules Go peuvent-ils être utilisés pour la résoudre tout en conservant une structure de projet modulaire ?
Navigation
Nous souhaitons concevoir notre projet avec la structure suivante :
├── main.go └── models └── user.go
Dans cette mise en page, main.go importe le fichier user.go, qui définit le type d'utilisateur. Cependant, le compilateur avertit que l'utilisateur n'est pas défini dans le package principal.
Question
Pourquoi cette erreur se produit-elle et comment pouvons-nous la résoudre tout en conservant une structure de projet modulaire ?
Réponse
Le problème vient de l'absence de définition de module dans le projet. Avant Go 1.11.1, Go s'appuyait sur la variable d'environnement $GOPATH, qui introduisait des complexités dans la gestion des dépendances du projet.
Les modules Go, introduits dans Go 1.11.1 et activés par défaut dans Go 1.11.3, adressent ce problème. En activant les modules (via la variable d'environnement GO111MODULE=on), nous pouvons créer des projets modulaires avec des dépendances versionnées et une organisation hiérarchique.
Solution
Pour exploiter les modules Go, suivez ces étapes :
Créez un fichier go.mod :
/Users/myuser/Projects/my-project/ ├── go.mod ├── main.go └── src/ └── models/ └── user.go
Importer user.go dans main.go :
Exemple main.go :
package main import ( "fmt" "main/src/models/user" ) func main() { fmt.Println(user.User{"new_user"}) }
Exemple d'utilisateur. go :
package user type User struct { Login string }
Cette structure nous permet d'importer le type d'utilisateur du fichier models/user.go dans le fichier main.go. Le fichier go.mod définit le nom du module et sert de racine au projet.
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!