...
使用mysql 客户端的正确姿势,解决一堆 3306 time_wait的问题
package dbs import ( "database/sql" "fmt" "log" "time" _ "github.com/go-sql-driver/mysql" ) var MysqlDb *sql.DB var MysqlDbErr error const ( USER_NAME = "root" PASS_WORD = "123456" HOST = "localhost" PORT = "3306" DATABASE = "hudb" CHARSET = "utf8" ) // 初始化链接 func init() { dbDSN := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s", USER_NAME, PASS_WORD, HOST, PORT, DATABASE, CHARSET) // 打开连接失败 MysqlDb, MysqlDbErr = sql.Open("mysql", dbDSN) //defer MysqlDb.Close(); if MysqlDbErr != nil { log.Println("dbDSN: " + dbDSN) panic("数据源配置不正确: " + MysqlDbErr.Error()) } // 最大连接数 MysqlDb.SetMaxOpenConns(100) // 闲置连接数 MysqlDb.SetMaxIdleConns(20) // 最大连接周期 MysqlDb.SetConnMaxLifetime(100 * time.Second) if MysqlDbErr = MysqlDb.Ping(); nil != MysqlDbErr { panic("数据库链接失败: " + MysqlDbErr.Error()) } } // 用户表结构体 type User struct { Id int64 `db:"id"` Name string `db:"name"` } // 查询数据,指定字段名 func StructQueryField() { user := new(User) row := MysqlDb.QueryRow("select id, name from tb1 where id=?", 1) if err := row.Scan(&user.Id, &user.Name); err != nil { fmt.Printf("scan failed, err:%v", err) return } fmt.Println(user.Id, user.Name) MysqlDb.Close() row1 := MysqlDb.QueryRow("select id, name from tb1 where id=?", 1) if err := row1.Scan(&user.Id, &user.Name); err != nil { fmt.Printf("scan failed, err:%v", err) return } fmt.Println(user.Id, user.Name) }