booting-go

module
v1.4.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 26, 2022 License: Apache-2.0

README

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框架项目,更多功能请继续往下看。

Directories

Path Synopsis
web
gen_tool
internal
demo/api_test
Package api Code Generated by booctl; SKIP IF EXISTS.
Package api Code Generated by booctl; SKIP IF EXISTS.
demo/filter
Package filter Code Generated by booctl; SKIP IF EXISTS.
Package filter Code Generated by booctl; SKIP IF EXISTS.
demo/init
Package init Code Generated by booctl; DO NOT EDIT.
Package init Code Generated by booctl; DO NOT EDIT.
plugin

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL