logo
0
0
WeChat Login

Mach

基于 go-web 框架构建的 Web 应用示例项目。

通过 Go module 引入 go-web 作为依赖,框架基础设施(HTTP 服务器、数据库、Redis、缓存、日志、DI 装配等)全部由 go-web 提供,本项目仅关注业务逻辑。

项目结构

mach/ ├── main.go # 入口,嵌入静态资源,调用 go-web 的 cmd.Start() ├── config/ │ ├── app.go # AppProvider 配置入口,注册自定义配置和迁移模型 │ └── autoload/ # 自定义配置项 │ ├── app.go # 应用名称、运行模式 │ ├── cache.go # 缓存驱动 │ ├── database.go # 数据库连接 │ ├── http.go # HTTP 监听地址、静态文件 │ ├── middleware.go # 中间件(CORS 等) │ ├── migration.go # 数据库迁移模型 │ ├── redis.go # Redis 连接 │ ├── router.go # 路由注册 │ └── static_fs.go # 嵌入式静态文件 ├── app/ │ ├── controller/ # 控制器 │ ├── service/ # 业务逻辑 │ ├── dao/ # 数据访问 │ ├── model/ # 数据模型 │ └── dto/ # 数据传输对象 ├── templates/ # HTML 模板 ├── static/ # 静态资源 ├── config.yaml.example # 配置文件示例 ├── Dockerfile # Docker 构建 └── go.mod # 模块定义

快速开始

环境要求

  • Go 1.25+

运行

  1. 复制配置文件并按需修改:
cp config.yaml.example config.yaml
  1. 启动服务:
go run main.go

服务默认监听 :8080,访问 http://localhost:8080 查看效果。

构建

go build -o mach main.go ./mach

Docker

docker build -t mach . docker run -p 8080:8080 mach

开发指南

添加路由

编辑 config/autoload/router.go,在路由注册函数中添加新路由:

router.GET("/hello", deps.WrapHandler(controller.HelloController{}.GetHello))

添加控制器

app/controller/ 下新建文件,嵌入 go-web 的 BaseResponse 可直接使用 Success() / Error() 等响应方法:

package controller import ( gowebCtrl "cnb.cool/mliev/open/go-web/app/controller" "cnb.cool/mliev/open/go-web/pkg/interfaces" "github.com/gin-gonic/gin" ) type HelloController struct { gowebCtrl.BaseResponse } func (r HelloController) GetHello(c *gin.Context, helper interfaces.HelperInterface) { r.Success(c, gin.H{"message": "hello"}) }

添加数据库迁移

config/autoload/migration.goGet() 方法中添加模型:

func (receiver Migration) Get() []any { return []any{ &model.User{}, } }

添加中间件

编辑 config/autoload/middleware.go,在中间件列表中追加:

"http.middleware": []gin.HandlerFunc{ gowebMiddleware.CorsMiddleware(helper), myCustomMiddleware(), },

框架升级

go-web 发布新版本后,只需更新依赖:

go get cnb.cool/mliev/open/go-web@latest go mod tidy

本地开发阶段使用 go.mod 中的 replace 指令指向本地路径,正式发布时移除即可。

About

No description, topics, or website provided.
Language
Go82.1%
Dockerfile15.7%
HTML2.2%