虽然 Golang 语法一言难尽,但对硬件资源占用小确实很香,部署在1核1G的云服务上完全没压力。在写 Go Web 业余项目的过程中,不知不觉打磨出一个脚手架的雏形,实现了包括国际化、访问控制、支持单测等基本的功能。
项目仓库
代码示例
创建控制器
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 打包静态资源
|---- ...
集成框架
前端
- jquery
- jquery-validation
- bootstrap
- bootstrap-table
- lodash
- moment
- daterangepicker
- jstree
- ui-data github.com/magicodex/u…
- pure-framework github.com/magicodex/p…
后端
- 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