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

关于 web 项目结构的规划

  •  
  •   blue7wings · 2022-10-21 09:47:50 +08:00 · 4228 次点击
    这是一个创建于 758 天前的主题,其中的信息可能已经有所发展或是发生改变。

    从其他语言转 Go,沿用以前的习惯,一直采用传统的 MVC 结构,大致如下:

    .
    ├── controller
    │   ├── post
    │   └── user
    ├── go.mod
    ├── main.go
    ├── model
    │   ├── post
    │   └── user
    ├── route
    │   ├── post
    │   └── user
    └── service
        ├── post
        └── user
    

    看到有人采用如下的结构,感觉更加符合 Go 语言的代码目录风格

    .
    ├── go.mod
    ├── main.go
    ├── post
    │   ├── controller
    │   ├── model
    │   ├── route
    │   └── service
    └── user
        ├── controller
        ├── model
        ├── route
        └── service
    

    不知道各位项目中采用的是哪种目录结构,希望 Gopher 能给些参考,多谢多谢

    18 条回复    2022-10-21 15:14:51 +08:00
    jeesk
        1
    jeesk  
       2022-10-21 09:52:07 +08:00
    看领导, 只有统一就好了。
    kongkongyzt
        2
    kongkongyzt  
       2022-10-21 10:09:08 +08:00
    除了向外暴露的 api 接口在根目录下有一个叫 api 的目录,其他的代码都收到 internal 目录中
    winnie2012
        3
    winnie2012  
       2022-10-21 10:18:19 +08:00
    两种结构都可以,第二种更加边界更加内聚一些,方便改为微服务或者 Serverless
    angrylid
        5
    angrylid  
       2022-10-21 10:24:20 +08:00 via Android
    我用第二种架构碰到过循环引用的问题。(不代表它不好只是我比较菜)
    dqzcwxb
        6
    dqzcwxb  
       2022-10-21 10:37:35 +08:00   ❤️ 2
    面向对象设计,增加项目可读性降低开发和维护成本
    面向过程开发,会导致重复劳动但是方便团队分工从而提升整体效率
    dudubaba
        7
    dudubaba  
       2022-10-21 10:46:22 +08:00
    个人偏向第二种,移出模块只需要按目录就行了,不用每个文件夹里找。
    kiddult
        8
    kiddult  
       2022-10-21 10:46:53 +08:00
    @angrylid 跟你没关系,这种结构,除非所有人脑袋都非常清醒,不然一定会有循环引用
    mantis
        9
    mantis  
       2022-10-21 10:48:28 +08:00
    @kongkongyzt 同意
    SimbaPeng
        10
    SimbaPeng  
       2022-10-21 12:23:54 +08:00
    slert
        11
    slert  
       2022-10-21 12:25:30 +08:00
    这和语言关系不大吧 看个人喜好
    matrix1010
        12
    matrix1010  
       2022-10-21 12:25:59 +08:00 via iPhone
    建议参考 grafana
    sophos
        13
    sophos  
       2022-10-21 12:41:20 +08:00
    wildlife
        14
    wildlife  
       2022-10-21 13:09:19 +08:00
    kratos-layout 这种类分层结构思路可以参考,不一定非得用 kratos 框架

    https://github.com/go-kratos/kratos-layout
    RedBeanIce
        15
    RedBeanIce  
       2022-10-21 13:25:26 +08:00
    第二种
    zhuweiyou
        16
    zhuweiyou  
       2022-10-21 13:44:45 +08:00
    看具体情况吧.
    我们基本是一个大项目下面,各自负责自己的模块(比如加一个活动就新增一个目录), 不太会有交集, 第二种更适合.
    ElmerZhang
        17
    ElmerZhang  
       2022-10-21 14:18:18 +08:00
    项目本身就是个微服务的话,第一种更合适
    wencan
        18
    wencan  
       2022-10-21 15:14:51 +08:00
    我都是采取三层模型:
    服务层 /控制层: http service 、rpc service 、mq 消费者
    业务逻辑实现层
    数据访问层 /客户端层: http 调用、mysql 、redis 、mq 生产者等
    另外,把一些不带业务逻辑的 struct 单独作为数据模型层,贯穿三层,算是挂了
    https://github.com/wencan
    欢迎交流
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1206 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:52 · PVG 01:52 · LAX 09:52 · JFK 12:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.