Golang Go语言中关于同一个package下多目录问题
Golang Go语言中关于同一个package下多目录问题
go mod 方式创建的项目
假如我有如下目录结构
models
├── dir1
│ ├── menu.go
│ ├── role.go
│ └── user.go
├── dir2
│ ├── role.go
│ └── user.go
├── system.go
└── others.go
我现在想把 models 下所有的.go 文件的 package 都定义为 models,但是这样定义了子目录下的想过models.
的方式来访问却不行
好像只能将 dir1 下的 package 定义为 dir1,然后在impor "models/dir1"
,最后通过dir1.
访问
还有一个问题就是我上面有 2 个 user.go 都定义了 User struct,在使用 gorm 创建表能分别指定表名吗?还是说只能将 struct 定义成不一样来搞定了?
更多关于Golang Go语言中关于同一个package下多目录问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
多个目录就是多个 package,不存在一个 package 多个目录这样的说法。
gorm 可以支持指定表名。
更多关于Golang Go语言中关于同一个package下多目录问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
好吧,谢谢!
没有必要这么定义目录层级,我猜 Go 这么设计 package 是高内聚的考虑
你把每个 model 都定义一个 struct,每个 struct 对应一个 model,然后把函数都绑定到这个 struct 上就行了
这样调用的时候就是 models.xModel{} models.xxxModel{}
主要是想做文件区分。 就例如上面的例子有 2 个 user,如果放到同一个目录的话,必须得换名字
把一个模型写成两个这种问题本身就很奇怪,如果真的要这么做那就只有写两个不一样的 user struct 名字,然后指定同一个表名就行了,还有一种是使用组合的方式,struct 内嵌另一个 struct
在Golang(Go语言)中,同一个package下可以有多个目录,这是通过Go语言的包(package)机制和导入路径(import path)来实现的。以下是一些关键点,帮助你理解并管理这种情况:
-
包名一致性: 无论你将代码分散到多少个目录中,只要它们属于同一个package,包名(即
package
关键字后面的名称)必须一致。 -
文件组织: 你可以根据功能模块或逻辑将代码拆分成多个文件,并将这些文件放在不同的目录中。只要这些文件的包名相同,它们就被视为同一个package的一部分。
-
导入路径: 当从其他package导入这个多目录的package时,你通常使用的是这个package的根目录的导入路径。Go编译器会自动处理包内部不同目录的文件。
-
初始化函数: 每个目录中可以有自己的
init()
函数,这些函数会在包被导入时自动执行。注意,同一个package下的所有init()
函数执行顺序是不确定的。 -
构建工具: 使用Go的构建工具(如
go build
、go test
等)时,不需要特别指定目录结构,只要目录和文件符合Go的约定即可。
总之,在Go语言中,通过合理地组织目录和文件,你可以轻松地在同一个package下管理多个目录的代码,同时保持代码的清晰和可维护性。