Golang Go语言中关于web项目结构的规划
从其他语言转 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 能给些参考,多谢多谢
Golang Go语言中关于web项目结构的规划
更多关于Golang Go语言中关于web项目结构的规划的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
除了向外暴露的 api 接口在根目录下有一个叫 api 的目录,其他的代码都收到 internal 目录中
两种结构都可以,第二种更加边界更加内聚一些,方便改为微服务或者 Serverless
我用第二种架构碰到过循环引用的问题。(不代表它不好只是我比较菜)
面向对象设计,增加项目可读性降低开发和维护成本
面向过程开发,会导致重复劳动但是方便团队分工从而提升整体效率
个人偏向第二种,移出模块只需要按目录就行了,不用每个文件夹里找。
跟你没关系,这种结构,除非所有人脑袋都非常清醒,不然一定会有循环引用
同意
这和语言关系不大吧 看个人喜好
建议参考 grafana
kratos-layout 这种类分层结构思路可以参考,不一定非得用 kratos 框架
https://github.com/go-kratos/kratos-layout
第二种
看具体情况吧.
我们基本是一个大项目下面,各自负责自己的模块(比如加一个活动就新增一个目录), 不太会有交集, 第二种更适合.
项目本身就是个微服务的话,第一种更合适
我都是采取三层模型:
服务层 /控制层: http service 、rpc service 、mq 消费者
业务逻辑实现层
数据访问层 /客户端层: http 调用、mysql 、redis 、mq 生产者等
另外,把一些不带业务逻辑的 struct 单独作为数据模型层,贯穿三层,算是挂了
https://github.com/wencan
欢迎交流
在Golang(Go语言)中规划Web项目结构时,应遵循一些基本原则,以确保代码的可读性、可维护性、可扩展性和模块化。以下是一个推荐的Web项目结构:
- cmd目录:存放项目的入口文件,如main.go,负责程序的启动、初始化、停止等功能。此目录应保持整洁,避免放置过多业务逻辑代码。
- internal目录:用于存放项目的内部私有代码和库,不允许在项目外部使用。可以进一步细分为app、pkg等子目录,分别存放组件逻辑代码和共享代码。
- pkg目录:包含可导出的公共库,可以被其他项目引用。放置此目录前需慎重考虑,避免将私有代码放入。
- configs目录:存放配置文件模板或默认配置。
- deployments目录:用于存放IaaS、PaaS系统和容器编排部署所需的配置及模板。
- third_party目录:外部辅助工具目录,用于存放fork的代码和其他第三方工具。
- web目录(可选):如果项目包含配套的前端程序代码,可以存放到此目录。
此外,还可以根据项目需求添加init、scripts、build、tools、assets、githooks、api、docs、examples等目录,用于存放系统初始化配置、构建脚本、程序构建和持续集成相关文件、项目支持工具、项目使用的其他资源、Git钩子、API文档、设计开发文档和示例代码等。
总之,规划Golang Web项目结构时,应综合考虑项目的实际需求和未来的扩展性,确保代码结构清晰、易于维护。