Mengapakah mengimport fail daripada subfolder mengakibatkan ralat 'tidak ditentukan' dalam Go dan bagaimanakah Modul Go boleh digunakan untuk menyelesaikannya sambil mengekalkan struktur projek modular?

Linda Hamilton
Lepaskan: 2024-11-15 11:56:02
asal
288 orang telah melayarinya

Why does importing a file from a subfolder result in an

Utilizing Go Modules to Structure Projects with Subfolders

Navigation
We want to design our project with the following structure:

├── main.go
└── models
    └── user.go
Salin selepas log masuk

In this layout, main.go imports the user.go file, which defines the User type. However, the compiler warns that User is undefined in the main package.

Question
Why does this error occur, and how can we resolve it while maintaining a modular project structure?

Answer
The issue stems from the absence of a module definition in the project. Prior to Go 1.11.1, Go relied on the $GOPATH environment variable, which introduced complexities in managing project dependencies.

Go modules, introduced in Go 1.11.1 and enabled by default in Go 1.11.3, address this problem. By enabling modules (via the GO111MODULE=on environment variable), we can create modular projects with versioned dependencies and hierarchical organization.

Solution
To leverage Go modules, follow these steps:

  1. Create a go.mod file:

    • Add module to define the module name, which in this case is main.
  2. Structure your project as follows:
/Users/myuser/Projects/my-project/
├── go.mod
├── main.go
└── src/
    └── models/
        └── user.go
Salin selepas log masuk
  1. Import user.go in main.go:

    • In main.go, use import "main/src/models/user" to import the user.go file.
  2. Sample main.go:

    package main
    
    import (
     "fmt"
     "main/src/models/user"
    )
    
    func main() {
     fmt.Println(user.User{"new_user"})
    }
    Salin selepas log masuk
  3. Sample user.go:

    package user
    
    type User struct {
     Login string
    }
    Salin selepas log masuk

This structure allows us to import the User type from the models/user.go file into the main.go file. The go.mod file defines the module name and serves as the project's root.

Atas ialah kandungan terperinci Mengapakah mengimport fail daripada subfolder mengakibatkan ralat 'tidak ditentukan' dalam Go dan bagaimanakah Modul Go boleh digunakan untuk menyelesaikannya sambil mengekalkan struktur projek modular?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan