gorm是golang的orm框架。
读写分离的前提是数据库实现了主从复制,依赖相关文档:https://gorm.io/docs/dbresolver.html

安装依赖
go get gorm.io/driver/mysql #MYSQL驱动
go get gorm.io/gorm #GORM框架
go get gorm.io/plugin/dbresolver #gorm的插件代码
Register时支持指定哪些表用哪些数据库去做读写,在上面的文档地址中有示例,通过Register的链式调用。
Policy:
RandomPolicy:完全随机使用
RoundRobinPolicy:依次使用列表中的连接,循环使用
StrictRoundRobinPolicy:判断健康程度选择使用哪个连接
package main
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/plugin/dbresolver"
)
func main() {
primaryDsn := "root:123456@tcp(127.0.0.1:23306)/local_db"
slaveDsn := "root:123456@tcp(127.0.0.1:23307)/local_db"
db, _ := gorm.Open(mysql.Open(primaryDsn))
db.Use(dbresolver.Register(dbresolver.Config{
Sources: []gorm.Dialector{mysql.Open(primaryDsn)}, //主库
Replicas: []gorm.Dialector{mysql.Open(slaveDsn)}, //从库
Policy: dbresolver.RandomPolicy{},
TraceResolverMode: true, //debug中显示[source]或[replica]
}))
var count int64
db.Debug().Table("users").Count(&count)
fmt.Print(count)
db.Debug().Table("users").Create(map[string]any{
"username": "44",
"password": "44444",
})
}