Categorygithub.com/go-xuan/quanx
repositorypackage
1.24.1031
Repository: https://github.com/go-xuan/quanx.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# README

quanx

基于gin+gorm的web微服务搭建框架 启动项目代码量更少,操作更加简便

获取quanx

go get github.com/go-xuan/quanx

服务启动

启动简单,两行代码即可启动一个微服务

package main

import (
	"fmt"
	"time"
	
	"github.com/go-xuan/quanx"

	"demo/internal/model/entity"
	"demo/internal/router"
)

func main() {
	// 初始化服务引擎
	var engine = quanx.NewEngine()

	// 服务启动
	engine.RUN()
}

初始化表结构

func main() {
	// 初始化服务引擎
	var engine = quanx.NewEngine()
    
	// 初始化表结构
	engine.AddTable(
		&User{}, // 需要实现gormx.Tabler接口
	)
    
	// 服务启动
	engine.RUN()
}

// gormx.Tabler接口
type Tabler interface {
	TableName() string    // 表名
	TableComment() string // 表注释
	InitData() any        // 表初始数据
}

// 用户表结构必须实现gormx.Tabler接口
type User struct {
	Id           int64     `json:"id" gorm:"type:bigint; not null; comment:用户ID;"`
	Name         string    `json:"name" gorm:"type:varchar; not null; comment:姓名;"`
	CreateUserId int64     `json:"createUserId" gorm:"type:bigint; not null; comment:创建人ID;"`
	CreateTime   time.Time `json:"createTime" gorm:"type:timestamp; default:now(); comment:创建时间;"`
	UpdateUserId int64     `json:"updateUserId" gorm:"type:bigint; not null; comment:更新人ID;"`
	UpdateTime   time.Time `json:"updateTime" gorm:"type:timestamp; default:now(); comment:更新时间;"`
}

// 定义表名
func (User) TableName() string {
	return "t_sys_user"
}

// 定义表注释
func (User) TableComment() string {
	return "用户信息表"
}

// 不为nil时,在初始化表结构之后向表里插入初始化数据
func (User) InitData() any {
	return nil
}

绑定路由

func main() {
	// 初始化服务引擎
	var engine = quanx.NewEngine()
    
	// 添加gin的路由加载函数
	engine.AddGinRouter(BindApiRouter)
    
	// 服务启动
	engine.RUN()
}

// 绑定api路由
func BindApiRouter(router *gin.RouterGroup) {
	// 获取默认数据源
	db := gormx.DB()
    
	// 获取具体数据源
	//db := gormx.DB("{{数据源名称}}")

	// 用户信息表-增删改查,一行代码实现CRUD
	ginx.NewCrudApi[entity.User](router.Group("user"), db)
}

初始化方法

func main() {
	// 初始化服务引擎
	var engine = quanx.NewEngine(
	    quanx.UseQueue, // 开启任务队列
	)
    
	// 新增初始化方法
	engine.AddCustomFunc(Init1)
	// 或者开启任务队列,使用任务队列
	engine.AddQueueTask("init2", Init2)
    
	// 服务启动
	engine.RUN()
}


func Init1() {
	fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
}

func Init2() {
	fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
}

加载自定义配置

func main() {
	// 初始化服务引擎
	var engine = quanx.NewEngine(
	    quanx.UseQueue, // 开启任务队列
	)

	// 添加配置器,Config结构体需要实现Configurator接口
	engine.AddConfigurator(Config)

	// 服务启动
	engine.RUN()
}

// Configurator配置器接口
type Configurator interface {
	Title() string   // 配置器标题
	Reader() *Reader // 配置文件读取
	Run() error      // 配置器运行
}

var Config *config

// 此配置必须实现Configurator配置器接口
type config struct {
}

func (c config) Title() string {
	return "配置项名称标题"
}

func (c config) Reader() *confx.Reader {
	return &confx.Reader{
		FilePath:    "",    // 本地配置文件
		NacosGroup:  "",    // nacos配置分组,默认为服务名
		NacosDataId: "",    // nacos配置ID
		Listen:      false, // 是否监听
	}
}

func (c config) Run() error {
	// todo 配置读取后的实际操作
	return nil
}

服务配置

支持yaml、json、toml、properties等各种配置类型的配置文件。

服务配置

quanx框架本身已实现了一些常规配置项的读取和初始化,开发者仅需要在项目代码中添加必要配置文件(默认yaml格式)即可。

应用配置

配置文件路径:conf/config.yaml,此配置必须添加。

server:
  name: demo                  # 应用名
  port: 8080                  # 服务端口
  prefix: /demo               # 服务api前缀
  debug: true                 # 开启debug模式

nacos配置

配置文件路径:conf/nacos.yaml,不使用nacos可不添加。

address: "127.0.0.1:8848"     # string nacos服务地址,多个以英文逗号分割
username: "nacos"             # string 用户名
password: "nacos"             # string 密码
nameSpace: "demo"             # string 命名空间
mode: 2                       # int 模式(0-仅配置中心;1-仅服务发现;2-配置中心和服务发现)

数据库配置

配置文件路径:conf/database.yaml,默认单数据库。

source: "default"             # string 数据源名称
enable: false                 # bool 是否启用
type: "mysql"                 # string 数据库类型(mysql/postgres)
host: "127.0.0.1"             # string host
port: 5432                    # int 端口
username: "root"              # string 用户名
password: "root"              # string 密码
database: ""                  # string 数据库名
schema: ""                    # string 模式名(postgres)
debug: false                  # bool 开启debug
init: false                   # bool 是否初始化表结构以及数据
多数据源

如果想要连接多个数据库,需要在启动时开启多数据源:

func main() {
	var engine = quanx.NewEngine(
	    quanx.MultiDatabase, // 开启多数据源
	)
}

同时更新conf/database.yaml配置文件内容为:

- name: default
  enable: true
  type: 
  host: 
  port: 
  username: 
  password: 
  database: 
  debug: 
- name: db1
  enable: 
  type: 
  host: 
  port: 
  username: 
  password: 
  database: 
  debug: true
......

redis配置

配置文件路径:conf/redis.yaml,默认单redis数据库。

source: "default"             # string 数据源名称
enable: false                 # bool 是否启用
host: "127.0.0.1"             # string host
port: 6379                    # int 端口
password: ""                  # string 密码
database: 0                   # int 数据库
mode: 0                       # int 模式(0-单机;1-集群),默认单机模式
多redis源

如果需要连接多个redis数据源,需要在启动时开启多数据源:

func main() {
	var engine = quanx.NewEngine(
	    quanx.MultiRedis, // 开启多redis数据源
	)
}

更新conf/redis.yaml配置文件内容为:

- name: default
  enable: 
  host: 
  port: 
  password: 
  database: 
  mode: 0
- name: redis_db1
  enable: 
  host: 
  port: 
  password: 
  database: 
  mode: 0
......

自定义配置

每一项配置都需要在go代码中使用struct进行声明,而且结构体并实现Configurator配置器接口。

demo.yaml:

key1: 123
key2: "456"
key3:
  - "abc"
  - "def"

对应结构体:

// 此配置需要实现Configurator配置器接口
type demo struct {
	Key1 int      `json:"key1" yaml:"key1"`
	Key2 string   `json:"key2" yaml:"key2"`
	Key3 []string `json:"key3" yaml:"key3"`
}

func (d demo) Title() string {
	return "demo配置"
}

func (d demo) Reader() *confx.Reader {
	return &confx.Reader{
		FilePath:    "demo.yaml", // 本地配置文件
		NacosGroup:  "demo",      // nacos配置分组,默认为服务名
		NacosDataId: "demo.yaml", // nacos配置ID
		Listen:      false,       // 是否监听
	}
}

func (d demo) Run() error {
	// todo 配置读取后的实际操作
	fmt.Println(c.Key1)
	fmt.Println(c.Key2)
	fmt.Println(c.Key3)
	return nil
}
本地配置

当服务启动时不启用nacos,并且配置项对应结构实现Configurator接口时,Reader()方法返回的Reader.FilePath不为空。

func main() {
	// 初始化服务启动引擎
	// 启动参数不加app.EnableNacos即表示不使用nacos
	var engine = quanx.NewEngine()
}

func (d demo) Reader() *confx.Reader {
	return &confx.Reader{
		FilePath:    "demo.yaml", // 本地配置文件
	}
}

Nacos配置

当服务启动启用nacos,并且配置项对应结构实现Configurator接口时,Reader()方法返回的Reader.NacosDataId不为空。

func main() {
	// 初始化服务启动引擎
	var engine = quanx.NewEngine(
	    quanx.EnableNacos, // 启用nacos
	)
}

func (d demo) Reader() *confx.Reader {
	return &confx.Reader{
		NacosGroup:  "demo",      // nacos配置分组,默认为服务名
		NacosDataId: "demo.yaml", // nacos配置ID
		Listen:      false,       // 是否监听
	}
}