goal/database 支持在任意 go 项目中使用啦
前言#
经过了去年的忙碌,现在终于有点时间填之前的坑了。
在去年(2022),goal/database 组件发布之后,有朋友试用后问到 “是否能在 goal 框架之外使用这个数据库组件?”
我当时给的答复是可以的,但因为时间精力等原因,并没有对此做更多的介绍和讲解。这次趁最近在更新 database 组件,顺手在这里介绍一下应该如何在 goal 之外的框架使用 github.com/goal-web/database 这个好用的数据库组件。
安装#
像安装其他大部分 go 组件一样,我们可以通过 go get 很方便的安装它
go get github.com/goal-web/database
使用#
package "example"
import (
"github.com/goal-web/database"
"github.com/goal-web/database/table"
"github.com/gin-gonic/gin"
)
func init() {
// 实例化数据库工厂
factory := database.NewFactory(
database.Config{
Default: "mysql",
Connections: map[string]contracts.Fields{
"mysql": {
"driver": "mysql",
"host": "localhost",
"port": "3306",
"database": "goal",
"username": "root",
"password": "123456",
"charset": "utf8mb4",
"collation": "utf8mb4_unicode_ci",
},
"mysql2": {
"driver": "mysql",
"host": "localhost",
"port": "3307",
"database": "goal",
"username": "root",
"password": "123456",
"charset": "utf8mb4",
"collation": "utf8mb4_unicode_ci",
},
},
},
nil, // 第二个参数是一个 goal 的事件实例,非 goal 环境的情况下,允许为 nil
)
// 为 table 包设置数据库工厂
table.SetFactory(factory)
}
// GetUserInfo gin 框架的 http 接口
func GetUserInfo(ctx *gin.Context) {
ctx.JSON(200, gin.H{
"user": table.Query("users").Find(ctx.Query("user_id")),
})
}
// GetAnotherUserInfo 获取另一个数据库连接中的用户信息的接口
func GetAnotherUserInfo(ctx *gin.Context) {
ctx.JSON(200, gin.H{
"user": table.WithConnection("users", "mysql2").Find(ctx.Query("user_id")),
})
}
更多用法#
更多更复杂的用法,例如自定义模型等请移步 github.com/goal-web/database
推荐文章: