基于 Gin 框架打造 Go Web 开发脚手架

356 阅读1分钟

虽然 Golang 语法一言难尽,但对硬件资源占用小确实很香,部署在1核1G的云服务上完全没压力。在写 Go Web 业余项目的过程中,不知不觉打磨出一个脚手架的雏形,实现了包括国际化、访问控制、支持单测等基本的功能。

项目仓库

gitee.com/magicodex/g…

代码示例

创建控制器

package demo_controller

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

func Ping(ctx *gin.Context) {
	ctx.PureJSON(http.StatusOK, gin.H{
		"message": "pong",
	})
}

注册路由

package demo

import (
	demo_controller "app/app_src/modules/demo/controller"

	"github.com/gin-gonic/gin"
)

// 注册路由

func RegisterRoutes(router *gin.RouterGroup) {
	router.GET("/demo/ping", demo_controller.Ping)
}

注册模块

package modules

import (
	"github.com/gin-gonic/gin"

	"app/app_src/modules/demo"
)

// 注册路由

func RegisterRoutes(router *gin.RouterGroup) {
	// 注册各个模块的路由
	demo.RegisterRoutes(router)
}

目录结构

|---- app_src           GO代码
   |--- framework       框架代码
      |--- app          获取应用信息
      |--- autotest     单元测试工具包
      |--- constant     常量
      |--- db           封装数据库操作
      |--- dev_tools    
      |--- gin          创建 Gin 引擎的逻辑
      |--- i18n         提供获取本地化文本的工具类
      |--- ioc          实现简单的 IoC 容器
      |--- security     提供安全相关的方法
      |--- template     封装 Go 模板的逻辑
      |--- util         提供常用的工具类
   |--- modules
      |--- routes.go    向 Gin 注册路由
      |--- ...
   |--- ...
|---- build
   |---- script         编译成 linux 版本的可执行文件等
   |---- ...
|---- doc               文档
   |--- ...
|---- main
   |--- main.go         启动程序
|---- resources         资源目录
   |--- app             应用配置文件等
   |--- unittest        单元测试资源
|---- web_root          前端目录
   |--- app             视图模板、通用JS等
   |--- build           构建 JSX 文件等
   |--- public          静态资源
   |--- test            前端测试用例
   |--- Gruntfile.js 
   |---- ...
|---- embed_fs.go       通过 embed 打包静态资源
|---- ...

集成框架

前端

后端

  • github.com/gin-gonic/gin
  • github.com/spf13/viper
  • github.com/jmoiron/sqlx
  • go.uber.org/zap
  • github.com/stretchr/testify
  • github.com/timandy/routine
  • github.com/nicksnyder/go-i18n/v2/goi18n

单元测试

image.png

参考资料