首页 > 后端开发 > Golang > 正文

为什么从子文件夹导入文件会导致 Go 中出现'未定义”错误,如何使用 Go Modules 来解决该错误,同时保持模块化项目结构?

Linda Hamilton
发布: 2024-11-15 11:56:02
原创
287 人浏览过

Why does importing a file from a subfolder result in an

利用 Go 模块通过子文件夹构建项目

导航
我们希望设计具有以下结构的项目:

├── main.go
└── models
    └── user.go
登录后复制

在此布局中,main.go 导入了 user.go 文件,该文件定义了 User 类型。然而,编译器警告主包中未定义 User。

问题
为什么会出现此错误,以及我们如何在保持模块化项目结构的同时解决它?

解答
问题源于项目中缺少模块定义。在 Go 1.11.1 之前,Go 依赖于 $GOPATH 环境变量,这在管理项目依赖项方面带来了复杂性。

Go 模块,在 Go 1.11.1 中引入并在 Go 1.11.3 中默认启用,地址这个问题。通过启用模块(通过 GO111MODULE=on 环境变量),我们可以创建具有版本化依赖关系和分层组织的模块化项目。

解决方案
要利用 Go 模块,请按照以下步骤操作:

  1. 创建一个 go.mod文件:

    • 添加模块定义模块名称,在本例中为 main。
  2. 按如下方式构建您的项目:
/Users/myuser/Projects/my-project/
├── go.mod
├── main.go
└── src/
    └── models/
        └── user.go
登录后复制
  1. 导入user.go进去main.go:

    • 在 main.go 中使用 import "main/src/models/user" 导入 user.go 文件。
  2. 样本main.go:

    package main
    
    import (
     "fmt"
     "main/src/models/user"
    )
    
    func main() {
     fmt.Println(user.User{"new_user"})
    }
    登录后复制
  3. 示例 user.go:

    package user
    
    type User struct {
     Login string
    }
    登录后复制

这个结构允许我们将 User 类型从 models/user.go 文件导入到 main.go 文件中。 go.mod 文件定义模块名称并作为项目的根目录。

以上是为什么从子文件夹导入文件会导致 Go 中出现'未定义”错误,如何使用 Go Modules 来解决该错误,同时保持模块化项目结构?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板