V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
imherer

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

  •  
  •   imherer · Jul 29, 2020 · 2658 views
    This topic created in 2104 days ago, the information mentioned may be changed or developed.

    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 replies    2020-07-31 10:11:01 +08:00
    catror
        1
    catror  
       Jul 29, 2020 via Android
    多个目录就是多个 package,不存在一个 package 多个目录这样的说法。
    gorm 可以支持指定表名。
    imherer
        2
    imherer  
    OP
       Jul 29, 2020
    @catror 好吧,谢谢!
    Carlgao
        3
    Carlgao  
       Jul 30, 2020
    没有必要这么定义目录层级,我猜 Go 这么设计 package 是高内聚的考虑
    你把每个 model 都定义一个 struct,每个 struct 对应一个 model,然后把函数都绑定到这个 struct 上就行了
    这样调用的时候就是 models.xModel{} models.xxxModel{}
    imherer
        4
    imherer  
    OP
       Jul 30, 2020
    @Carlgao 主要是想做文件区分。 就例如上面的例子有 2 个 user,如果放到同一个目录的话,必须得换名字
    Carlgao
        5
    Carlgao  
       Jul 31, 2020   ❤️ 1
    @imherer 把一个模型写成两个这种问题本身就很奇怪,如果真的要这么做那就只有写两个不一样的 user struct 名字,然后指定同一个表名就行了,还有一种是使用组合的方式,struct 内嵌另一个 struct
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2364 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 10:32 · PVG 18:32 · LAX 03:32 · JFK 06:32
    ♥ Do have faith in what you're doing.