Go 学习小册:go.jun.one
Github
  • 首页
  • Go 面试题
    • Untitled
    • 数组与切片有什么异同
    • 41-50
    • 4-5月
    • Go 进阶实战 100 题
    • Go 并发编程
  • 跟着例子学习Go
    • 基础部分
      • 12. 函数
      • 13. 多返回值函数
      • 14.可变参函数
      • 15. 闭包
  • 我的社区贡献和开源项目
  • Struct 结构体
    • 自定义类型
    • 结构体
    • 匿名结构体
    • 接口 interface
  • gin
    • Gin 项目初始化
  • 并发
    • 并发安全和锁
    • 一文搞定 Go 并发的实现原理:goroutine
  • 常用代码块
    • gerr
  • Go Web 开发进阶
    • MySQL 的连接和初始化
    • MySQL Register 源码解读
    • Go 原生操作 MySQL CRUD
  • go-redis的基本使用
由 GitBook 提供支持
在本页

这有帮助吗?

在GitHub上编辑
  1. Go Web 开发进阶

MySQL 的连接和初始化

main.go
package main

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

// 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)
	}

	// 数值需要业务具体情况来确定
	db.SetConnMaxLifetime(time.Second * 10) // 它设置了连接可重用的最大时间长度
	db.SetMaxIdleConns(200)                 // 最大连接数
	db.SetMaxOpenConns(10)                  // 最大空闲连接数

	// 尝试与数据库建立连接(校验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 判断的下面
}
上一页gerr下一页MySQL Register 源码解读

最后更新于3年前

这有帮助吗?