关于 golang 同一个 package 下多目录问题

2020-07-29 15:57:24 +08:00
 imherer

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 定义成不一样来搞定了?

2226 次点击
所在节点    Go 编程语言
5 条回复
catror
2020-07-29 16:13:05 +08:00
多个目录就是多个 package,不存在一个 package 多个目录这样的说法。
gorm 可以支持指定表名。
imherer
2020-07-29 16:37:15 +08:00
@catror 好吧,谢谢!
Carlgao
2020-07-30 09:30:58 +08:00
没有必要这么定义目录层级,我猜 Go 这么设计 package 是高内聚的考虑
你把每个 model 都定义一个 struct,每个 struct 对应一个 model,然后把函数都绑定到这个 struct 上就行了
这样调用的时候就是 models.xModel{} models.xxxModel{}
imherer
2020-07-30 09:35:11 +08:00
@Carlgao 主要是想做文件区分。 就例如上面的例子有 2 个 user,如果放到同一个目录的话,必须得换名字
Carlgao
2020-07-31 10:11:01 +08:00
@imherer 把一个模型写成两个这种问题本身就很奇怪,如果真的要这么做那就只有写两个不一样的 user struct 名字,然后指定同一个表名就行了,还有一种是使用组合的方式,struct 内嵌另一个 struct

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/694072

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX