booting-go
Intro
基于SpringBoot框架思想实现的Golang即开即用插件化框架。
Function
- DI 依赖注入:将结构体的构造过程托管给框架,可按名称、类型、接口类型甚至接口切片类型进行注入。
- 多环境配置:yaml格式配置文件,多配置文件按优先级覆盖
- 配置注入:配置文件自动注入,更有AutoConfigure接口
- 更结构化的web模块:
- 将路由
url
写在TAG
中的全新体验
- 像Spring Web一样自动注入请求的变量
- 自动生成Swagger接口文档
- 主流web框架仅需简单编写driver即可自由切换且无需修改代码,已实现Iris、Echo及Gin的扩展
- 类似Java Servlet的Filter功能,可对请求进行前置后置处理
- 更结构化的data模块:
- 可自定义的数据源配置,轻松实现多数据源
- 一行配置实现SSH连接数据库功能
- 默认使用go原生DB实现,各种orm轻松扩展,已实现Gorm的扩展
- Flyway数据库版本控制
- 插件化数据库支持,默认提供mysql实现
- 插件化的cache模块:
- 默认提供map缓存和redis缓存实现
- 一行配置即可切换缓存实现
- 插件化的log模块:
- 日志工厂设计,可轻松自定义日志实现
- 默认提供logrus日志框架实现
- 一行配置轻松切换
- security模块:集成Casbin权限认证模块
QuickStart
搭建项目
创建项目
创建目录 booting-go-demo
使用Goland打开项目或在控制台中启用go module
设置proxy代理:
- Goland:File->Settings->Go->Go Modules->Environment:
GOPROXY=https://goproxy.cn
- Console:
set GOPROXY=https://goproxy.cn
初始化项目:
go mod init booting-go-demo
创建main.go
package main
import (
"gitee.com/kristas/booting-go/framework"
)
func main() {
framework.Application().Run()
}
向生成的go.mod文件中添加:
require gitee.com/kristas/booting-go v1.3.2
下载依赖:
go mod tidy
创建配置文件
创建基础配置文件config.yml
application:
app_name: booting-go-demo
logging:
instance: logrus
time_format: "2006-01-02 15:04:05"
web:
charset: UTF-8
iris:
FireMethodNotAllowed: true
DisableBodyConsumptionOnUnmarshal: true
TimeFormat: "2006-01-02 15:04:05"
Charset: UTF-8
EnableOptimizations: true
logrus:
skip_index: 4
创建local
环境配置文件config-local.yml
server:
port: 8083
application:
logging:
level: trace # panic, fatal, error, warn(warning), info, debug, trace
创建prod
环境配置文件config-prod.yml
server:
port: 8080
application:
logging:
level: trace
至此项目初始化完成。
搭建基础模块
Controller
创建controller目录
创建hello_controller.go
package controller
import (
"gitee.com/kristas/booting-go/framework"
"gitee.com/kristas/booting-go/framework/core/bean"
"gitee.com/kristas/booting-go/framework/web"
)
func init() {
framework.Component(new(HelloController))
}
type HelloController struct {
bean.Component
hello web.Rest `GET:"/hello"`
AppName string `value:"application.app_name"`
}
func (r *HelloController) Group() string {
return "/api/v1"
}
func (r *HelloController) Hello() string {
return r.AppName
}
Config
创建config目录
创建init.go
package config
import (
_ "booting-go-demo/controller" //初始化controller
"gitee.com/kristas/booting-go/framework"
"gitee.com/kristas/booting-go/framework/core/bean"
"gitee.com/kristas/booting-go/plugin/iris_restful_plugin/iris_container"
)
func init() {
framework.Component(components...)
}
var components = bean.Components{
new(iris_container.Starter), //使用iris作为web容器
}
Main
向main.go
中引入Config
package main
import (
_ "booting-go-demo/config" //引入config,使初始化链生效
"gitee.com/kristas/booting-go/framework"
)
func main() {
framework.Application().Run()
}
Start
启动项目
go run main.go
现在打开浏览器输入 http://localhost:8083/api/v1/hello 即可看到
"booting-go-demo"
至此已成功搭建booting-go框架项目,更多功能请继续往下看。