Golang Go语言中关于同一个package下多目录问题

发布于 1周前 作者 phonegap100 来自 Go语言

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

6 回复

多个目录就是多个 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)来实现的。以下是一些关键点,帮助你理解并管理这种情况:

  1. 包名一致性: 无论你将代码分散到多少个目录中,只要它们属于同一个package,包名(即package关键字后面的名称)必须一致。

  2. 文件组织: 你可以根据功能模块或逻辑将代码拆分成多个文件,并将这些文件放在不同的目录中。只要这些文件的包名相同,它们就被视为同一个package的一部分。

  3. 导入路径: 当从其他package导入这个多目录的package时,你通常使用的是这个package的根目录的导入路径。Go编译器会自动处理包内部不同目录的文件。

  4. 初始化函数: 每个目录中可以有自己的init()函数,这些函数会在包被导入时自动执行。注意,同一个package下的所有init()函数执行顺序是不确定的。

  5. 构建工具: 使用Go的构建工具(如go buildgo test等)时,不需要特别指定目录结构,只要目录和文件符合Go的约定即可。

总之,在Go语言中,通过合理地组织目录和文件,你可以轻松地在同一个package下管理多个目录的代码,同时保持代码的清晰和可维护性。

回到顶部