package c_db import ( "cicv-data-closedloop/common/config/c_log" _ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx" "os" ) var MysqlDb *sqlx.DB // InitSqlxMysql 初始化mysql连接 // - charset 字符集 utf8、utf8mb4 func InitSqlxMysql(username string, password string, ip string, port string, dbname string, charset string) { var err error // 连接数据库 // - parseTime 是否将数据库中的时间类型字段解析为 Go 中的 time.Time 类型。 // - loc 时间解析时使用的本地位置信息。通常设置为 "Local"。 MysqlDb, err = sqlx.Open("mysql", username+":"+password+"@tcp("+ip+":"+port+")/"+dbname+"?charset="+charset+"&parseTime=True&loc=Local") if err != nil { c_log.GlobalLogger.Error("程序退出。mysql连接失败:", err) os.Exit(-1) } // 配置连接池 MysqlDb.SetMaxOpenConns(10) // 设置最大打开连接数为 10 MysqlDb.SetMaxIdleConns(5) // 设置最大空闲连接数为 5 MysqlDb.SetConnMaxLifetime(0) // 设置连接的最大生存时间为 0(不限制) c_log.GlobalLogger.Info("mysql连接成功。") } func DoTx(sqlTemplate string, params []any) error { // 插入到数据库 tx, err := MysqlDb.Beginx() if err != nil { c_log.GlobalLogger.Error("开启事务失败:", err) return err } // 2 在事务中执行操作 _, err = tx.Exec(sqlTemplate, params...) if err != nil { c_log.GlobalLogger.Error("执行操作失败,回滚事务:", err) tx.Rollback() return err } // 如果所有操作成功,则提交事务 err = tx.Commit() if err != nil { c_log.GlobalLogger.Error("提交事务失败:", err) return err } return nil }