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 ?

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 ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-15 11:56:02280parcourir

Why does importing a file from a subfolder result in an

Utilisation des modules Go pour structurer des projets avec des sous-dossiers

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 :

  1. Créez un fichier go.mod :

    • Ajouter un module pour définir le nom du module, qui dans ce cas est principal.
  2. Structurez votre projet comme suit :
/Users/myuser/Projects/my-project/
├── go.mod
├── main.go
└── src/
    └── models/
        └── user.go
  1. Importer user.go dans main.go :

    • Dans main.go, utilisez import "main/src/models/user" pour importer l'utilisateur. go file.
  2. Exemple main.go :

    package main
    
    import (
     "fmt"
     "main/src/models/user"
    )
    
    func main() {
     fmt.Println(user.User{"new_user"})
    }
  3. 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn