V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
imherer
V2EX  ›  Go 编程语言

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

  •  
  •   imherer · 2020-07-29 15:57:24 +08:00 · 2308 次点击
    这是一个创建于 1584 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    5 条回复    2020-07-31 10:11:01 +08:00
    catror
        1
    catror  
       2020-07-29 16:13:05 +08:00 via Android
    多个目录就是多个 package,不存在一个 package 多个目录这样的说法。
    gorm 可以支持指定表名。
    imherer
        2
    imherer  
    OP
       2020-07-29 16:37:15 +08:00
    @catror 好吧,谢谢!
    Carlgao
        3
    Carlgao  
       2020-07-30 09:30:58 +08:00
    没有必要这么定义目录层级,我猜 Go 这么设计 package 是高内聚的考虑
    你把每个 model 都定义一个 struct,每个 struct 对应一个 model,然后把函数都绑定到这个 struct 上就行了
    这样调用的时候就是 models.xModel{} models.xxxModel{}
    imherer
        4
    imherer  
    OP
       2020-07-30 09:35:11 +08:00
    @Carlgao 主要是想做文件区分。 就例如上面的例子有 2 个 user,如果放到同一个目录的话,必须得换名字
    Carlgao
        5
    Carlgao  
       2020-07-31 10:11:01 +08:00   ❤️ 1
    @imherer 把一个模型写成两个这种问题本身就很奇怪,如果真的要这么做那就只有写两个不一样的 user struct 名字,然后指定同一个表名就行了,还有一种是使用组合的方式,struct 内嵌另一个 struct
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1372 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:29 · PVG 01:29 · LAX 09:29 · JFK 12:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.