[Go] MySQL的连接和初始化

641 阅读1分钟
package main

import (
   "database/sql"
   "fmt"
   _ "github.com/go-sql-driver/mysql" // init()
)

// sql.DB 是表示连接的数据库对象(结构体实例),它保存了连接数据库相关的所有信息。它内部维护着一个多个底层连接的连接池,
// 它可以安全地被多个 goroutine 同时使用
var db *sql.DB

// initMySQL 初始化 MySQL 数据库,返回 nil 则初始化成功,否则返回 error
func initMySQL() (err error) {
   // DSN: Data Source Name
   //dsn := "user:passsword@tcp(127.0.0.1:3306)/dbname"
   dsn := "root:@tcp(127.0.0.1:3306)/sql2"
   // 初始化全局的 db 对象,而不是新声明一个 db 变量
   db, err = sql.Open("mysql", dsn)
   if err != nil {
      panic(err)
   }

   // 尝试与数据库建立连接(校验dsn是否正确)
   err = db.Ping()
   return
}

func main() {
   // 连接 MySQL 数据库
   if err := initMySQL(); err != nil {
      fmt.Println("connect to db failed,", err)
      //return
   } else {
      fmt.Println("connect to db success!")
   }
   // Close() 用来释放数据库连接相关的资源
   defer db.Close() // 写在err 判断的下面
}