Notas de estudio de Go-Spring dos [versión v1.1.0]

versión de registro

Instalar

# 安装spring核心包
go get -u github.com/go-spring/[email protected]
# 安装web starter
# gin
go get -u github.com/go-spring/[email protected]
# echo
go get -u github.com/go-spring/[email protected]
# 安装gorm starter
go get -u github.com/go-spring/[email protected]
# 安装gorm
go get -u github.com/jinzhu/gorm
# 安装 redis starter
# go-redis
go get -u github.com/go-spring/[email protected]
# redigo
go get -u github.com/[email protected]

Integración de aplicaciones web starter-gorm

1. Archivo de configuración config/application.yml

# gorm starter mysql 默认配置项, 同spring.datasource
db:
  url: root:password@tcp(host:3306)/db_name?charset=utf8mb4&parseTime=True&loc=Local

2.principal.ir

// code
package main

import (
	"github.com/go-spring/spring-core/gs"
	"github.com/go-spring/spring-core/web"
	_ "github.com/go-spring/starter-gin"
	// 需要引入该模块自动装载默认的gorm, 若无需使用自动装载可自定义gorm bean
	_ "github.com/go-spring/starter-gorm/mysql"
	"github.com/jinzhu/gorm"
	"log"
)

// 定义model
/**
建表sql
CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `email` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1460907264817729538 DEFAULT CHARSET=utf8
数据sql
INSERT INTO `user` VALUES(1, "dragons", 24, "[email protected]")
 */
type user struct {
    
    
	// 主键ID
	Id int64 `json:"id" gorm:"primary_key"`
	Username string `json:"username"`
	Age int `json:"age"`
	Email string `json:"email"`
}

// TableName 获取表名方法, 默认复数表名, 这里表名与model名称相同需要实现Tabler接口
func (u *user) TableName() string {
    
    
	return "user"
}

// 定义控制器
type gormController struct {
    
    
	// 自动注入starter启动的*gorm.DB
	db *gorm.DB `autowire:"?"`
}

// 定义查询所有用户的端点方法
func (c *gormController) selectUsers(ctx web.Context)  {
    
    
	var users []user
	// 查询所有用户信息
	c.db.Model(&user{
    
    }).Find(&users)
	// 返回所有用户信息
	ctx.JSON(&users)
}

func init() {
    
    
	// 创建 gormController 控制器bean实例, 并在控制器实例创建后添加初始化方法
	// 访问http://127.0.0.1:8080/users 将看到返回[{"id": 1, "username", "dragons", "age": 24, "email": "[email protected]"}]
	gs.Object(new(gormController)).Init(func(c *gormController) {
    
    
		// 添加Web端点/users, 绑定gormController.selectUsers方法
		gs.GetMapping("/users", c.selectUsers)
	})
}

func main() {
    
    
	log.Fatal(gs.Run())
}

Integración de aplicaciones web con múltiples fuentes de datos

1.config/aplicación.yml

# 这里自定义了一个配置项 dbs (可自行更改) 来配置多数据源, 其中name为bean名称, type为数据库类型(与gorm数据库类型名称一致)
dbs:
  - name: gorm-db1
    url: root:password@tcp(host:3306)/db_name?charset=utf8mb4&parseTime=True&loc=Local
    type: mysql
  - name: gorm-db2
    url: root:password@tcp(host:3306)/db_name?charset=utf8mb4&parseTime=True&loc=Local
    type: mysql

2. Cree un archivo dbs.go para inyectar la instancia *gorm.DB por separado

package main

import (
	"github.com/go-spring/spring-core/gs"
	"github.com/jinzhu/gorm"
	"github.com/labstack/gommon/log"
	// 需要引入Mysql驱动
	_ "github.com/jinzhu/gorm/dialects/mysql"
)

// 定义配置struct, 属性与配置文件相同
type DBConfig struct {
    
    
	Name string `value:"${name}"`
	Url string `value:"${url}"`
	Type string `value:"${type}"`
}

func init() {
    
    
    // 创建一个配置监听器, 当配置加载后将执行该方法
	gs.OnProperty("dbs", func(config []DBConfig) {
    
    
        // 遍历配置项
		for _, dbConfig := range config {
    
    
			db, err := CreateDB(dbConfig)
			if err != nil {
    
    
				log.Fatal(err)
			}
             // 将*gorm.DB注入Spring bean中
			gs.Object(db).Destroy(CloseDB).Name(dbConfig.Name)
		}
	})
}

func CreateDB(config DBConfig) (*gorm.DB, error) {
    
    
	return gorm.Open(config.Type, config.Url)
}

func CloseDB(db *gorm.DB) {
    
    
	log.Info("close gorm mysql")
	if err := db.Close(); err != nil {
    
    
		log.Error(err)
	}
}

3.principal.ir

package main

import (
	"github.com/go-spring/spring-core/gs"
	"github.com/go-spring/spring-core/web"
	_ "github.com/go-spring/starter-gin"
	"github.com/jinzhu/gorm"
	"log"
)

// 定义model
/**
建表sql
CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `email` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1460907264817729538 DEFAULT CHARSET=utf8
数据sql
INSERT INTO `user` VALUES(1, "dragons", 24, "[email protected]")
 */
type user struct {
    
    
	// 主键ID
	Id int64 `json:"id" gorm:"primary_key"`
	Username string `json:"username"`
	Age int `json:"age"`
	Email string `json:"email"`
}

// TableName 获取表名方法, 默认复数表名, 这里表名与model名称相同需要实现Tabler接口
func (u *user) TableName() string {
    
    
	return "user"
}

// 定义控制器
type gormController struct {
    
    
	// 注入指定bean名称为gorm-db1的实例
    /*
    v1.1.0移除getBean方法, 属性注入阶段后不保留研数据, 若需多项db切换则需要提前注入多项db的bean,自行实现切换逻, 示例如下:
    type StructName struct {
		db1 *gorm.DB `autowire:"gorm-db1"`
		db2 *gorm.DB `autowire:"gorm-db2"`
	}
    */
	db *gorm.DB `autowire:"gorm-db1"`
}

// 定义查询所有用户的端点方法
func (c *gormController) selectUsers(ctx web.Context)  {
    
    
	var users []user
	// 查询所有用户信息
	c.db.Model(&user{
    
    }).Find(&users)
	// 返回所有用户信息
	ctx.JSON(&users)
}

func init() {
    
    
	// 创建 gormController 控制器bean实例, 并在控制器实例创建后添加初始化方法
	// 访问http://127.0.0.1:8080/users 将看到返回[{"id": 1, "username", "dragons", "age": 24, "email": "[email protected]"}]
	gs.Object(new(gormController)).Init(func(c *gormController) {
    
    
		// 添加Web端点/users, 绑定gormController.selectUsers方法
		gs.GetMapping("/users", c.selectUsers)
	})
}

func main() {
    
    
	log.Fatal(gs.Run())
}

Integración de aplicaciones web starter-go-redis/starter-redigo

1.config/aplicación.yml

# redis starter 配置项
redis:
  host: host
  port: 6379
  password: password
  database: 0

2.principal.ir

package main

import (
	"github.com/go-spring/spring-core/gs"
	"github.com/go-spring/spring-core/redis"
	"github.com/go-spring/spring-core/web"
	_ "github.com/go-spring/starter-gin"
	"log"
	// 引入go-redis starter依赖
	_ "github.com/go-spring/starter-go-redis"
    // 引入redigo starter依赖
    // _ "github.com/go-spring/starter-redigo"
)

// 定义 redisController 控制器
type redisController struct {
    
    
	// 注入redis.Client bean, 注意redis为github.com/go-spring/spring-core/redis
	redisClient redis.Client `autowire:"?"`
}

// redis get 方法
func (c *redisController) get(ctx web.Context) {
    
    
	// 获取入参的key
	key := ctx.QueryParam("key")
	// redis get [key] 获取value
	value, err := c.redisClient.Get(ctx.Context(), key)
	if err != nil {
    
    
		ctx.JSON(web.ERROR.Error(err))
	} else {
    
    
		ctx.JSON(web.SUCCESS.Data(value))
	}
}

func init() {
    
    
	gs.Object(new(redisController)).Init(func(c *redisController) {
    
    
		gs.GetMapping("/redis/get", c.get)
	})
}

func main() {
    
    
	log.Fatal(gs.Run())
}

Supongo que te gusta

Origin blog.csdn.net/qq_33129963/article/details/121387401
Recomendado
Clasificación