Documentation
¶
Overview ¶
Package mysql 提供基于 go-sql-driver/mysql 的数据库连接构造器。
NewMySQL 会校验 DSN,为给定 namespace 注册带 Hook 的包装驱动,创建 *sql.DB 并配置连接池参数,然后返回数据库句柄和关闭用的 cleanup 函数。 同一 namespace 会复用已注册的驱动名称,便于在不同调用点共享同一组 driver 包 Hook 规则。
当启用 WithLogError 或 WithSlowThreshold 时,本包会按需安装错误日志或 慢查询日志 Hook;若未显式提供 logger,则会在需要时创建默认 logger。 NewMySQL 仅调用 sql.Open,不会主动 Ping 数据库,调用方需要在需要时 自行校验连通性。
Index ¶
- func NewMySQL(opts ...MySQLOption) (*sql.DB, func(), error)
- type MySQLOption
- func WithDSN(dsn string) MySQLOption
- func WithDSNParams(baseDSN string, params map[string]string) MySQLOption
- func WithHookManager(hook *kitdriver.HookManager) MySQLOption
- func WithLogError(logError bool) MySQLOption
- func WithLogger(logger kitlog.Logger) MySQLOption
- func WithNamespace(namespace string) MySQLOption
- func WithPoolIdleTime(idleTime time.Duration) MySQLOption
- func WithPoolMaxIdleConns(maxIdleConns int) MySQLOption
- func WithPoolMaxIdleTime(maxIdleTime time.Duration) MySQLOption
- func WithPoolMaxOpenConns(maxOpenConns int) MySQLOption
- func WithSlowThreshold(slowThreshold time.Duration) MySQLOption
- type MySQLOptions
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func NewMySQL ¶
func NewMySQL(opts ...MySQLOption) (*sql.DB, func(), error)
NewMySQL 基于 go-sql-driver/mysql 构造一个 *sql.DB 和清理函数。
NewMySQL 会先应用默认配置与传入选项,使用 ParseDSN 校验 DSN,然后以 "mysql-kit-<namespace>" 为名称按需注册带 Hook 的包装 driver,最后调用 sql.Open 创建 *sql.DB 并设置连接池参数。该函数只调用 sql.Open,不会主动 Ping 数据库,调用方需要在需要时自行验证连通性。
同一 namespace 的 driver 只会注册一次,后续调用会复用既有 driver 和其 初次注册时确定的 Hook 配置;新的 WithHookManager、WithLogError 和 WithSlowThreshold 不会重新装配已注册 driver。
参数:
- opts: 按顺序应用的 MySQL 构造选项。
返回:
- *sql.DB: 创建成功的数据库句柄,由调用方负责在不再使用时关闭。
- func(): 清理函数,内部调用 db.Close;关闭失败时吞掉错误,并在 logger 非 nil 时记录错误;需要感知关闭错误的调用方应直接调用 db.Close。
- error: DSN 校验失败、自动创建 logger 失败、sql.Open 失败,或驱动注册前 Hook 配置失败时返回错误。
Types ¶
type MySQLOption ¶
type MySQLOption func(*MySQLOptions)
MySQLOption 定义按引用修改 MySQLOptions 的函数式选项。
多个选项按传入顺序应用,后面的设置会覆盖前面的同类配置。
参数:
- *MySQLOptions: 待修改的 MySQL 构造配置;调用方不应直接传入 nil。
func WithDSN ¶
func WithDSN(dsn string) MySQLOption
WithDSN 设置传递给 NewMySQL 的原始 DSN。
DSN 会在 NewMySQL 中通过 go-sql-driver/mysql 的 ParseDSN 校验; 本选项本身不执行格式检查。
参数:
- dsn: 数据库连接字符串,例如 "user:password@tcp(host:port)/dbname?param=value"。
返回:
- MySQLOption: 设置 DSN 的配置函数。
func WithDSNParams ¶
func WithDSNParams(baseDSN string, params map[string]string) MySQLOption
WithDSNParams 基于基础 DSN 追加一组查询参数。
baseDSN 为空时使用包内默认 DSN。params 中的值会按 URL 查询串规则编码; 当基础 DSN 已包含查询参数时继续使用 "&" 追加,否则使用 "?"。params 为空时保持基础 DSN 原样不变。
参数:
- baseDSN: 基础 DSN;为空时使用包内默认 DSN。
- params: 要追加的 DSN 查询参数;为空时不追加查询串。
返回:
- MySQLOption: 设置 DSN 的配置函数。
func WithHookManager ¶ added in v0.0.10
func WithHookManager(hook *kitdriver.HookManager) MySQLOption
WithHookManager 指定一个自定义 HookManager 供驱动包装使用。
传入非 nil HookManager 后,NewMySQL 不会再为当前调用自动安装 HookLogError 或 HookLogSlow; 调用方需要自行向该管理器注册所需 Hook。传入 nil 等价于未指定。
参数:
- hook: 用于包装 driver 的 HookManager;调用方应传入非 nil 实例。
返回:
- MySQLOption: 设置 HookManager 的配置函数。
func WithLogError ¶
func WithLogError(logError bool) MySQLOption
WithLogError 请求为自动创建的 HookManager 安装 HookLogError。
该选项只在 NewMySQL 首次为某个 namespace 注册 driver 且未显式提供 WithHookManager 时生效。
参数:
- logError: 为 true 时启用错误日志 Hook;为 false 时不自动安装。
返回:
- MySQLOption: 设置错误日志 Hook 开关的配置函数。
func WithLogger ¶
func WithLogger(logger kitlog.Logger) MySQLOption
WithLogger 设置构造阶段和自动日志 Hook 使用的 logger。
该 logger 用于记录 DSN 校验失败、sql.Open 失败和 cleanup 关闭失败, 也会在自动安装 HookLogError 或 HookLogSlow 时复用。
参数:
- logger: 用于输出日志的 kit logger;传入 nil 时仅在需要自动日志 Hook 时尝试创建默认 logger。
返回:
- MySQLOption: 设置 logger 的配置函数。
func WithNamespace ¶
func WithNamespace(namespace string) MySQLOption
WithNamespace 设置当前配置对应的 driver 注册命名空间。
NewMySQL 会使用 "mysql-kit-<namespace>" 作为 driver 名称;同一 namespace 的后续调用会复用已注册的 driver 与其初次注册时确定的 Hook 配置。
参数:
- namespace: driver 注册命名空间;空字符串会生成 "mysql-kit-"。
返回:
- MySQLOption: 设置命名空间的配置函数。
func WithPoolIdleTime ¶
func WithPoolIdleTime(idleTime time.Duration) MySQLOption
WithPoolIdleTime 设置 NewMySQL 创建的 *sql.DB 的连接最大生命周期。
该选项最终映射到 (*sql.DB).SetConnMaxLifetime。非正值的含义沿用标准库 database/sql。
参数:
- idleTime: 连接可被复用的最长时间。
返回:
- MySQLOption: 设置连接最大生命周期的配置函数。
func WithPoolMaxIdleConns ¶
func WithPoolMaxIdleConns(maxIdleConns int) MySQLOption
WithPoolMaxIdleConns 设置 NewMySQL 创建的 *sql.DB 的最大空闲连接数。
该选项最终映射到 (*sql.DB).SetMaxIdleConns。非正值与超过最大打开连接数时的行为沿用标准库 database/sql。
参数:
- maxIdleConns: 连接池允许保留的最大空闲连接数。
返回:
- MySQLOption: 设置最大空闲连接数的配置函数。
func WithPoolMaxIdleTime ¶
func WithPoolMaxIdleTime(maxIdleTime time.Duration) MySQLOption
WithPoolMaxIdleTime 设置 NewMySQL 创建的 *sql.DB 的连接最大空闲时长。
该选项最终映射到 (*sql.DB).SetConnMaxIdleTime。非正值的含义沿用标准库 database/sql。
参数:
- maxIdleTime: 空闲连接在连接池中保留的最长时间。
返回:
- MySQLOption: 设置连接最大空闲时长的配置函数。
func WithPoolMaxOpenConns ¶
func WithPoolMaxOpenConns(maxOpenConns int) MySQLOption
WithPoolMaxOpenConns 设置 NewMySQL 创建的 *sql.DB 的最大打开连接数。
该选项最终映射到 (*sql.DB).SetMaxOpenConns。非正值的含义沿用标准库 database/sql。
参数:
- maxOpenConns: 连接池允许同时打开的最大连接数。
返回:
- MySQLOption: 设置最大打开连接数的配置函数。
func WithSlowThreshold ¶
func WithSlowThreshold(slowThreshold time.Duration) MySQLOption
WithSlowThreshold 设置自动慢操作日志 Hook 的耗时阈值。
该选项只在 NewMySQL 首次为某个 namespace 注册 driver 且未显式提供 WithHookManager 时生效;当操作耗时大于等于该阈值时会记录 Warn 日志。 非正值表示不自动安装慢操作日志 Hook。
参数:
- slowThreshold: 慢操作耗时阈值。
返回:
- MySQLOption: 设置慢操作阈值的配置函数。
type MySQLOptions ¶
type MySQLOptions struct {
// contains filtered or unexported fields
}
MySQLOptions 保存 NewMySQL 的构造参数。
MySQLOptions 通常通过 MySQLOption 函数组合填充,而不是由调用方直接操作 内部字段。NewMySQL 会先建立一份默认配置,再按传入顺序应用这些选项。