Skip to content
/ gmc Public

GMC is a powerful and flexible golang web and api development framework. GMC goal is high performance and write less code to do more things.

License

Notifications You must be signed in to change notification settings

snail007/gmc

Repository files navigation

GMC

GMC Logo

🚀 现代化的 Go Web & API 开发框架

一个智能、灵活、高性能的 Golang Web 和 API 开发框架

Actions Status codecov Go Report API Reference LICENSE Go Version

English | 简体中文

📖 完整文档 | 🎯 快速开始 | 💡 特性 | 🔧 示例


📋 目录


🎯 简介

GMC(Go Micro Container)是一个面向现代 Web 开发的全栈 Golang 框架。它致力于提供:

  • 🎨 高生产力 - 用更少的代码完成更多的功能
  • 高性能 - 基于高性能路由和优化的中间件
  • 🧩 模块化 - 清晰的架构和完善的依赖注入
  • 🛠️ 工具丰富 - 60+ 开箱即用的实用工具包
  • 📦 易于使用 - 简洁的 API 设计和详细的文档

GMC 不仅是一个 Web 框架,更是一个完整的开发工具集,适用于从小型 API 到大型企业级应用的各种场景。


✨ 核心特性

🌐 Web & API 开发

  • RESTful API - 快速构建 RESTful 风格的 API 服务
  • MVC 架构 - 完整的 MVC 模式支持,清晰的代码组织
  • 路由系统 - 高性能路由引擎,支持路由分组、参数、中间件
  • 控制器 - 优雅的控制器设计,支持依赖注入
  • 模板引擎 - 内置模板引擎,支持布局、继承、自定义函数

🗄️ 数据处理

  • 多数据库支持 - MySQL、SQLite3 开箱即用
  • ORM 集成 - 优雅的数据库操作接口
  • 缓存系统 - Memory、Redis、File 多种缓存后端
  • 会话管理 - 灵活的 Session 管理机制

🔧 开发工具

  • 配置管理 - 支持 TOML、JSON、YAML 等多种配置格式
  • 日志系统 - 分级日志、异步写入、自动轮转
  • 错误处理 - 完善的错误堆栈和错误链
  • 国际化 - i18n 支持,轻松实现多语言
  • 验证码 - 内置验证码生成器
  • 分页器 - 开箱即用的分页组件

⚙️ 高级功能

  • 中间件 - 灵活的中间件系统
  • 协程池 - 高性能 Goroutine 池管理
  • 限流器 - 双算法限流(滑动窗口/令牌桶),支持 API 限流、带宽控制
  • 性能分析 - pprof 集成,便捷的性能分析
  • 进程管理 - 守护进程、优雅重启支持
  • 依赖注入 - 清晰的依赖注入机制
  • 热编译 - 开发时自动编译重启(gmct run)
  • 资源打包 - 静态文件、模板、i18n 打包进二进制(gmct)

🛠️ 实用工具库(60+)

涵盖文件操作、网络工具、加密哈希、类型转换、集合操作、压缩解压、JSON 处理等各个方面。

🔨 GMCT 工具链

  • 项目生成 - 一键生成 Web/API 项目脚手架
  • 热编译 - 开发时自动编译和重启
  • 资源打包 - 将静态文件、模板、i18n 打包进二进制
  • 项目管理 - 简化开发流程的各种工具

📦 安装

环境要求

  • Go 1.16 或更高版本

安装框架

go get -u github.com/snail007/gmc

安装 GMCT 工具链

GMCT 是 GMC 的官方命令行工具,提供项目脚手架、热编译、资源打包等强大功能:

# 安装 gmct
go install github.com/snail007/gmct@latest

# 验证安装
gmct version

GMCT 快速安装(Linux/macOS)

# Linux AMD64
bash -c "$(curl -L https://github.com/snail007/gmct/raw/master/install.sh)" @ linux-amd64

# Linux ARM64
bash -c "$(curl -L https://github.com/snail007/gmct/raw/master/install.sh)" @ linux-arm64

# macOS - 请从 Release 页面下载
# https://github.com/snail007/gmct/releases

📖 GMCT 完整文档: https://github.com/snail007/gmct

验证安装

package main

import (
    "fmt"
    "github.com/snail007/gmc"
)

func main() {
    fmt.Println("GMC framework installed successfully!")
}

🚀 快速开始

使用 GMCT 创建项目(推荐)

GMCT 是 GMC 的官方工具链,可以快速生成项目脚手架:

# 创建 Web 项目
mkdir myapp && cd myapp
gmct new web

# 或创建 API 项目
gmct new api

# 热编译模式运行(开发时推荐)
gmct run

# 访问 http://localhost:7080

生成的项目结构:

myapp/
├── conf/
│   └── app.toml          # 配置文件
├── controller/
│   └── demo.go           # 控制器
├── initialize/
│   └── initialize.go     # 初始化
├── router/
│   └── router.go         # 路由
├── static/               # 静态文件
├── views/                # 模板文件
├── grun.toml            # GMCT 配置
└── main.go              # 入口文件

手动创建项目

1. 创建一个简单的 API 服务

package main

import (
    "github.com/snail007/gmc"
    gcore "github.com/snail007/gmc/core"
    gmap "github.com/snail007/gmc/util/map"
)

func main() {
    // 创建 API 服务器
    api, _ := gmc.New.APIServer(gmc.New.Ctx(), ":8080")

    // 注册路由
    api.API("/", func(c gmc.C) {
        c.Write(gmap.M{
            "code":    0,
            "message": "Hello GMC!",
            "data":    nil,
        })
    })

    // 创建应用并运行
    app := gmc.New.App()
    app.AddService(gcore.ServiceItem{
        Service: api.(gcore.Service),
    })
    
    app.Run()
}

运行后访问 http://localhost:8080/ 即可看到返回的 JSON 数据。

2. 创建一个 Web 应用

package main

import (
    "github.com/snail007/gmc"
    gcore "github.com/snail007/gmc/core"
)

type HomeController struct {
    gmc.Controller
}

func (c *HomeController) Index() {
    c.Write("Welcome to GMC!")
}

func main() {
    // 创建应用
    app := gmc.New.App()
    
    // 创建 HTTP 服务器
    s := gmc.New.HTTPServer(app.Ctx())
    s.Router().Controller("/", new(HomeController))
    
    // 添加服务并运行
    app.AddService(gcore.ServiceItem{
        Service: s,
    })
    
    app.Run()
}

🏗️ 架构设计

GMC 采用清晰的模块化架构,主要由以下几部分组成:

gmc/
├── core/               # 核心接口定义
├── module/             # 功能模块实现
│   ├── app/           # 应用程序框架
│   ├── cache/         # 缓存(Memory, Redis, File)
│   ├── config/        # 配置管理
│   ├── db/            # 数据库(MySQL, SQLite3)
│   ├── log/           # 日志系统
│   ├── i18n/          # 国际化
│   └── middleware/    # 中间件
├── http/              # HTTP 相关
│   ├── server/        # HTTP/API 服务器
│   ├── router/        # 路由
│   ├── controller/    # 控制器
│   ├── session/       # 会话管理
│   ├── template/      # 模板引擎
│   └── cookie/        # Cookie 处理
├── util/              # 工具包(60+ 独立工具)
│   ├── gpool/         # 协程池
│   ├── captcha/       # 验证码
│   ├── cast/          # 类型转换
│   ├── compress/      # 压缩/解压
│   ├── file/          # 文件操作
│   ├── http/          # HTTP 工具
│   ├── json/          # JSON 工具
│   ├── rate/          # 限流器
│   └── ...            # 更多工具
└── using/             # 依赖注入注册

详细架构说明请参考 ARCHITECTURE.md


🔨 GMCT 工具链

GMCT 是 GMC 框架的官方命令行工具,提供项目脚手架、热编译、资源打包等强大功能,极大提升开发效率。

🎯 主要功能

1. 项目生成

快速生成标准化的项目结构:

# 生成 Web 项目(MVC 架构)
gmct new web

# 生成 API 项目(轻量级)
gmct new api

# 指定包名
gmct new web --pkg github.com/yourname/myapp

2. 热编译开发

开发时自动监听文件变化,自动编译和重启:

# 热编译模式运行
gmct run

# 配置文件 grun.toml
[run]
# 监听的文件扩展名
watch_ext = [".go", ".toml"]
# 排除的目录
exclude_dir = ["vendor", ".git"]
# 编译命令
build_cmd = "go build -o tmp/app"
# 运行命令
run_cmd = "./tmp/app"

3. 资源嵌入(推荐使用 Go embed)

推荐使用 Go 1.16+ 的 embed 功能来嵌入资源,无需使用 GMCT 打包命令。

使用 embed 的优势:

  • ✅ Go 原生功能,无需额外工具
  • ✅ 类型安全,编译时检查
  • ✅ IDE 支持良好
  • ✅ 更标准化的实现

快速示例:

// static/static.go
package static
import "embed"
//go:embed *
var StaticFS embed.FS

// views/views.go  
package views
import "embed"
//go:embed *
var ViewFS embed.FS

// i18n/i18n.go
package i18n
import "embed"
//go:embed *.toml
var I18nFS embed.FS

详细文档:

⚠️ 注意: gmct tplgmct staticgmct i18n 命令已不再推荐使用。

4. 项目信息

# 查看版本
gmct version

# 查看帮助
gmct help

# 查看具体命令帮助
gmct new --help
gmct run --help

📋 GMCT 命令列表

命令 说明 示例
gmct new 创建新项目 gmct new web
gmct run 热编译运行 gmct run
gmct controller 生成控制器 gmct controller -n User
gmct model 生成模型 gmct model -n user
gmct version 查看版本 gmct version
gmct help 查看帮助 gmct help

⚠️ 已弃用: gmct tplgmct staticgmct i18n 已不再推荐,请使用 Go embed 功能。

🎬 完整开发流程示例

# 1. 安装 GMCT
go install github.com/snail007/gmct@latest

# 2. 创建新项目
mkdir mywebapp && cd mywebapp
gmct new web --pkg github.com/me/mywebapp

# 3. 热编译开发
gmct run
# 修改代码后自动重新编译和重启

# 4. 使用 embed 嵌入资源(推荐)
# 在 static/static.go、views/views.go 等文件中使用 embed
# 详见资源嵌入章节

# 5. 编译发布
go build -ldflags "-s -w" -o myapp

# 6. 部署
./myapp
# 单个二进制文件,包含所有资源

⚙️ 配置文件 grun.toml

GMCT 运行配置文件示例:

[run]
# 监听的文件扩展名
watch_ext = [".go", ".toml", ".html", ".js", ".css"]

# 排除的目录
exclude_dir = [
    "vendor",
    ".git",
    ".idea",
    "tmp",
    "bin",
]

# 编译前执行的命令
before_build = []

# 编译命令
build_cmd = "go build -o tmp/app"

# 运行命令
run_cmd = "./tmp/app"

# 运行后执行的命令
after_run = []

# 延迟重启时间(毫秒)
restart_delay = 1000

🌟 GMCT 优势

  1. 提升开发效率 - 热编译省去手动重启的麻烦
  2. 标准化项目 - 统一的项目结构,便于团队协作
  3. 简化部署 - 资源打包后单文件部署
  4. 降低学习成本 - 开箱即用的最佳实践
  5. 灵活配置 - 可自定义编译和运行流程

📖 完整文档: GMCT 工具链仓库


💡 示例代码

API 路由

api, _ := gmc.New.APIServer(gmc.New.Ctx(), ":8080")

// GET 请求
api.API("/user/:id", func(c gmc.C) {
    id := c.Param().ByName("id")
    c.Write(gmap.M{
        "user_id": id,
        "name":    "John Doe",
    })
})

// POST 请求
api.API("/user", func(c gmc.C) {
    name := c.Request().FormValue("name")
    // 处理业务逻辑
    c.Write(gmap.M{"status": "created", "name": name})
}, "POST")

控制器

type UserController struct {
    gmc.Controller
}

func (c *UserController) List() {
    users := []string{"Alice", "Bob", "Charlie"}
    c.Write(users)
}

func (c *UserController) Detail() {
    id := c.Param().ByName("id")
    c.Write("User ID: " + id)
}

// 在路由中注册
router.Controller("/user", new(UserController))

数据库操作

GMC 提供了强大的数据库抽象层,开箱即用支持 MySQL 和 SQLite3,并可轻松扩展。核心特性包括:

  • 多数据库和多数据源:支持同时连接和管理多个数据库实例。
  • ActiveRecord 模式:提供链式调用的查询构建器,能以非常直观的方式构建复杂的 SQL 查询。
  • 事务与查询缓存:完整的事务支持和可选的查询结果缓存。
  • ORM 与直接操作:支持灵活的 gdb.Model ORM 映射,也支持直接通过 ActiveRecord 进行无模型的数据库操作。
// 链式查询示例
rs, err := gmc.DB.DB().AR().From("users").Where(gdb.M{"age >": 18}).Query()

// 插入数据示例
_, err := gmc.DB.DB().AR().Insert("users", gdb.M{"name": "John"})

📖 详细用法、API 及完整示例,请参阅: 数据库模块详细指南

缓存使用

GMC 提供统一的缓存层,开箱即用支持 Redis、内存和文件三种缓存后端,并可同时配置和管理多个缓存实例。

// 初始化并获取默认缓存实例
gmc.Cache.Init(cfg)
cache := gmc.Cache.Cache()

// 基本操作
cache.Set("my_key", "my_value", 60) // 缓存60秒
val, _ := cache.Get("my_key")

📖 详细用法、多实例配置及 API,请参阅: 缓存模块详细指南

协程池

GMC 提供一个高性能、功能强大的协程池 gpool,用于高效管理大量并发任务,可动态扩缩容、限制并发、自动回收、捕获 panic 等。

推荐使用 gpool.NewOptimized(),这是一个经过优化的无锁版本,性能更佳。

import "github.com/snail007/gmc/util/gpool"

// 创建一个包含10个协程的优化版协程池
pool := gpool.NewOptimized(10)
defer pool.Stop()

// 提交任务
for i := 0; i < 100; i++ {
    pool.Submit(func() {
        // 执行你的任务...
    })
}

// 等待所有任务完成
pool.WaitDone()

📖 详细用法、性能对比及 API,请参阅: 协程池 (gpool) 详细指南

验证码生成

GMC 内置了简单易用的验证码生成工具 captcha,不依赖第三方图形库,支持多种字符模式、自定义字体、颜色、大小和干扰强度。

import "github.com/snail007/gmc/util/captcha"

// 创建默认验证码实例
cap := gcaptcha.NewDefault()
// 生成 4 位数字验证码
img, code := cap.Create(4, gcaptcha.NUM)

// img 是验证码图片数据 (image.Image)
// code 是验证码文本 (string)

📖 详细用法、自定义设置及 API,请参阅: 验证码 (captcha) 详细指南

限流器

GMC 提供了高性能的滑动窗口和令牌桶两种限流器 rate,用于精确控制请求速率和带宽,支持高并发和突发流量。

  • 滑动窗口限流器:适用于严格控制 QPS,如 API 接口限流、防刷。
  • 令牌桶限流器:适用于平滑限流,支持突发流量,如带宽限制、消息队列消费。
import "github.com/snail007/gmc/util/rate"

// 创建滑动窗口限流器:每秒最多 100 个请求
slidingLimiter := grate.NewSlidingWindowLimiter(100, time.Second)

// 创建令牌桶限流器:每秒 50 个令牌,突发容量 100
tokenLimiter := grate.NewTokenBucketBurstLimiter(50, time.Second, 100)

// 使用滑动窗口限流
if slidingLimiter.Allow() {
    // 处理请求
}

// 使用令牌桶限流(阻塞等待)
if err := tokenLimiter.Wait(context.Background()); err == nil {
    // 处理请求
}

📖 详细用法、两种限流器对比及 API,请参阅: 限流器 (rate) 详细指南


🔗 更多示例和文档

核心模块

工具包(部分)

📚 查看所有工具包: util/

🎓 完整示例: demos/ 目录包含了各种使用场景的完整示例代码


🧩 核心组件

HTTP 服务器

GMC 提供两种 HTTP 服务器:HTTPServer (功能完备的 Web 服务器) 和 APIServer (轻量级 API 服务器)。它们共享强大的路由系统和中间件架构。

📖 详细生命周期、中间件及钩子,请参阅: HTTP Server 模块详细指南

路由系统

  • 高性能路由匹配
  • 支持路径参数 /user/:id
  • 支持通配符 /files/*filepath
  • 路由分组和中间件
  • RESTful 路由设计

📖 详细路由配置和使用,请参阅: 路由模块详细指南

中间件

GMC 提供完整的中间件支持,包括 CORS、Gzip、日志、认证、限流等。所有中间件都经过优化,可以在生产环境直接使用。

// 添加中间件
server.AddMiddleware(middleware.Recovery())    // 错误恢复
server.AddMiddleware(middleware.AccessLog())   // 访问日志
server.AddMiddleware(middleware.CORS())        // 跨域支持
server.AddMiddleware(middleware.Gzip())        // 响应压缩

📖 详细中间件配置和自定义,请参阅: 中间件模块详细指南

模板引擎

内置强大的模板引擎,支持布局、继承、自定义函数等特性。

// 渲染模板
c.View().Render("user/profile", gmap.M{
    "name": "John",
    "age":  25,
})

📖 详细模板语法和配置,请参阅: 模板引擎详细指南


🛠️ 工具包

GMC 提供 60+ 独立的工具包,可以在任何 Go 项目中单独使用:

分类 工具包 说明
🔢 数据处理 cast 类型转换
json JSON 操作
collection 集合操作
set 集合数据结构
list 列表操作
map Map 工具
📁 文件 & I/O file 文件操作
compress 压缩/解压(gzip, tar, zip, xz)
bytes 字节处理
🌐 网络 http HTTP 客户端工具
net 网络工具
proxy 代理工具
url URL 处理
🔐 安全 hash 哈希(MD5, SHA, bcrypt)
captcha 验证码生成
并发 gpool 协程池
sync 同步工具
rate 限流器(滑动窗口/令牌桶)
loop 循环控制
🔧 系统 process 进程管理
exec 命令执行
os 操作系统工具
env 环境变量
📊 其他 paginator 分页器
pprof 性能分析
args 参数解析
rand 随机数

单独使用工具包示例:

import "github.com/snail007/gmc/util/cast"

// 类型转换
str := gcast.ToString(123)
num := gcast.ToInt("456")

⚙️ 配置说明

GMC 支持多种配置格式(TOML、JSON、YAML)。推荐使用 TOML 格式。

配置文件结构

GMC 使用 app.toml 作为主配置文件,支持的主要配置块:

  • [httpserver] - HTTP 服务器配置
  • [apiserver] - API 服务器配置
  • [template] - 模板引擎配置
  • [static] - 静态文件配置
  • [log] - 日志配置
  • [database] - 数据库配置
  • [cache] - 缓存配置
  • [session] - Session 配置
  • [i18n] - 国际化配置

基本配置示例(app.toml)

# HTTP 服务配置
[httpserver]
listen=":7080"
printroute=true

# 日志配置
[log]
level=3  # 3-INFO, 4-WARN, 5-ERROR
output=[0,1]  # 0-控制台, 1-文件
dir="./logs"

# 数据库配置(示例)
[database]
default="default"

[[database.mysql]]
enable=true
id="default"
host="127.0.0.1"
port="3306"
database="test"

📖 完整配置说明和高级用法,请参阅:


📊 性能测试

GMC 在性能测试中表现优异:

# 运行基准测试
go test -bench=. -benchmem ./...

主要性能指标:

  • 路由性能 - 高速路由匹配,支持数万路由规模
  • 并发处理 - 协程池优化,高效的并发任务调度
  • 内存占用 - 优化的内存分配,降低 GC 压力
  • 吞吐量 - 高并发下保持稳定的吞吐量

📂 项目结构

推荐的项目结构:

myapp/
├── main.go              # 应用入口
├── app.toml            # 配置文件 ([App 模块详细说明](module/app/README.md))
├── controller/         # 控制器
│   ├── home.go
│   └── user.go
├── model/              # 数据模型
│   └── user.go
├── service/            # 业务逻辑层
│   └── user_service.go
├── middleware/         # 自定义中间件
│   └── auth.go
├── router/             # 路由配置
│   └── router.go
├── initialize/         # 初始化逻辑
│   └── init.go
├── views/              # 模板文件
│   ├── layout.html
│   └── home/
│       └── index.html
└── static/             # 静态文件
    ├── css/
    ├── js/
    └── images/

🤝 贡献指南

我们欢迎所有形式的贡献!在提交 PR 之前,请确保:

代码规范

  1. 注释 - 为公共函数和类型添加清晰的注释
  2. 测试 - 测试覆盖率应达到 90% 以上
  3. 示例 - 为公共函数提供使用示例
  4. 基准测试 - 为性能关键代码添加基准测试

包必需文件

每个包应包含以下文件(xxx 为包名):

文件 说明
xxx.go 主文件
xxx_test.go 单元测试(覆盖率 > 90%)
example_test.go 示例代码
benchmark_test.go 基准测试
doc.go 包说明文档
README.md 测试和基准测试结果

可以参考 util/gpool 包来了解详细的代码规范。

提交流程

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

📝 文档


📜 许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件。


💬 联系我们


⭐ Star 历史

如果这个项目对你有帮助,请给我们一个 Star ⭐

Star History Chart


🙏 致谢

感谢所有为 GMC 做出贡献的开发者!


⬆ 回到顶部

Made with ❤️ by the GMC Team

About

GMC is a powerful and flexible golang web and api development framework. GMC goal is high performance and write less code to do more things.

Topics

Resources

License

Stars

Watchers

Forks

Contributors 3

  •  
  •  
  •  

Languages