我想将我的项目分解为子文件夹。
我想要这样的代码结构:
├── main.go
└── models
└── user.go
main.go 在哪里:
package main
import (
"fmt"
"./models"
)
func main(){
fmt.Println(User{"new_user"})
}
而 user.go 是:
package models
type User struct {
Login string
}
但 User 未在主包中定义,导入会引发警告“已导入且未使用”。
我做错了什么?我的项目很简单(不是这样的例子,而是只有几个文件( Controller 和模型)),我想要一个简单的结构。
也许我的做法完全错误?
最佳答案
我最近通过使用 go modules 实现了这一点。
自 go v1.11.1 起,Golang 引入了对模块的初步选择加入支持。这旨在完全消除,坦率地说,荒谬的 $GOPATH
必要性。您现在不仅可以在任何普通目录(例如 ~/development
)中拥有版本化的依赖项,而且您基本上可以拥有类似于 namespace 和子目录的内容。你可以enable this feature通过使用以下环境变量调用 go 命令:GO111MODULE=on
。
Go v1.11.3 预计 enable modules by default并定于 2019 年 8 月。
这是一个示例目录结构(您可能会在其他一些语言中找到它)。
~/Dev/my-app
├── src/
│ ├── one/
│ │ ├── two/
│ │ │ └── two.go
│ │ └── one.go
│ └── zero.go
├── go.mod
└── app.go
应用程序名为 my-app
,这将是 app.go
的模块名称。我们在 go.mod
中定义一次,然后子目录中的所有其他 go 文件都将自动导入,就好像它们是命名空间一样。
鉴于上述情况,two.go
,假设它包含一个名为 Two
的函数,将可通过使用 app.go
导入 my-app/src/one/two
.
为了实现这一目标,您需要执行以下操作:
go.mod
module my-app
two.go
package two
func Two() string {
return "I'm totally not supposed to be using go modules for this"
}
应用程序去
package main
import "my-app/src/one/two"
func main() {
two.Two()
}
如果你要在 two/中放置另一个文件,那么你可以简单地使用 two.TheNewFunc()
只要你使 TheNewFunc()
在新文件中可用文件。
我创建了一个非常简单的 GitHub repo您可以将其作为演示查看。
关于go - 将 go 项目分解为子文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51092587/