导航
我们希望设计具有以下结构的项目:
├── 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 模块,请按照以下步骤操作:
创建一个 go.mod文件:
/Users/myuser/Projects/my-project/ ├── go.mod ├── main.go └── src/ └── models/ └── user.go
导入user.go进去main.go:
样本main.go:
package main import ( "fmt" "main/src/models/user" ) func main() { fmt.Println(user.User{"new_user"}) }
示例 user.go:
package user type User struct { Login string }
这个结构允许我们将 User 类型从 models/user.go 文件导入到 main.go 文件中。 go.mod 文件定义模块名称并作为项目的根目录。
以上是为什么从子文件夹导入文件会导致 Go 中出现'未定义”错误,如何使用 Go Modules 来解决该错误,同时保持模块化项目结构?的详细内容。更多信息请关注PHP中文网其他相关文章!