- 问题描述:
在使用gorm连接docker mysql 镜像时,为了区分本地数据库跟镜像数据库,在拉起数据库镜像时指定映射了3306以外端口
str := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=True&loc=Local", user, pwd, host, port, dbname, charset)这样写就会报错了.
- 解决
- 当不 需要指定ip跟端口的时候 默认连接本地3306端口数据库
- 最后是使用
net.JoinHostPort()解决了问题,代码如下
// DB DB
var DB *gorm.DB
// InitMysql 初始化数据库连接
func InitMysql(datatype, user, pwd, dbname, charset, host, port string) {
// 数据链对象--mysql
hp := net.JoinHostPort(host, port) // 需要使用这个方法将host/port 拼接起来才能正常运行
str := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=%s&parseTime=True&loc=Local", user, pwd, hp, dbname, charset)
fmt.Println(str)
db, err := gorm.Open(datatype, str)
if err != nil {
panic(err)
}
// SetMaxIdleCons 设置连接池中的最大闲置连接数。
db.DB().SetMaxIdleConns(10)
// SetMaxOpenCons 设置数据库的最大连接数量。
db.DB().SetMaxOpenConns(100)
// SetConnMaxLifetiment 设置连接的最大可复用时间。
db.DB().SetConnMaxLifetime(time.Hour)
DB = db
}
- 搜到很多解决方法,不知道是不是都是 互相复制粘贴的. 一点用没有
- 这应该也只是解决方案之一(当确定问题出在
gorm.Open()连接字符串的时候可以试试)