首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Go 語言連接 MySQL 完整實戰:從安裝驅動到 CRUD 範例

     編輯:MySQL 資料庫相關知識

Go 透過 github.com/go-sql-driver/mysql 驅動連接 MySQL,支援 database/sql 標準介面。本文從 Ubuntu 環境建置、資料庫準備、驅動安裝到完整 CRUD 範例。

環境準備 (Ubuntu)

# 1. 安裝 MySQL Server
sudo apt-get update && sudo apt-get install mysql-server
# 記住 root 密碼 (如 root123)

# 2. 建立資料庫與使用者
mysql -u root -p
CREATE DATABASE people;
GRANT ALL PRIVILEGES ON people.* TO 'peo'@'localhost' IDENTIFIED BY 'peo123';
GRANT ALL PRIVILEGES ON people.* TO 'peo'@'%' IDENTIFIED BY 'peo123';  -- 遠程
FLUSH PRIVILEGES;
EXIT;

# 3. 開放遠程訪問 (編輯 my.cnf)
sudo nano /etc/mysql/my.cnf
# bind-address = 127.0.0.1  →  bind-address = 0.0.0.0
sudo systemctl restart mysql

# 4. 建表測試資料
mysql -u peo -p
USE people;
CREATE TABLE hello (age INT, name VARCHAR(10));
INSERT INTO hello VALUES (19, 'hello world');

Go 專案建置

# 1. 初始化模組
go mod init mysql_demo

# 2. 下載驅動
go get github.com/go-sql-driver/mysql

完整程式碼 (main.go)

package main

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

type User struct {
	Age  int    `json:"age"`
	Name string `json:"name"`
}

func main() {
	fmt.Println("start")

	// DSN 格式: user:pass@tcp(host:port)/dbname?charset=utf8mb4&parseTime=True&loc=Local
	dsn := "peo:peo123@tcp(192.168.0.58:3306)/people?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := sql.Open("mysql", dsn)
	if err != nil {
		panic(err)
	}
	defer db.Close()

	// 連線池調優 (生產環境建議)
	db.SetMaxOpenConns(20)
	db.SetMaxIdleConns(10)
	db.SetConnMaxLifetime(5 * time.Minute)

	// 查詢
	rows, err := db.Query("SELECT age, name FROM hello")
	if err != nil {
		panic(err)
	}
	defer rows.Close()

	for rows.Next() {
		u := &User{}
		if err := rows.Scan(&u.Age, &u.Name); err != nil {
			panic(err)
		}
		b, _ := json.Marshal(u)
		fmt.Println(string(b))
	}
	if err := rows.Err(); err != nil {
		panic(err)
	}

	fmt.Println("end")
}

關鍵 DSN 參數說明

參數用途
charset=utf8mb4連線字符集,支援 Emoji
parseTime=True自動將 DATETIME/TIMESTAMP 轉為 time.Time
loc=Local時區解析為本地時區
timeout=10s建立連線超時
readTimeout=30s讀取超時

生產環境檢查清單

  • [ ] 使用連線池 (SetMaxOpenConns 等) 避免連線洩漏。
  • [ ] 啟用 db.Ping() 啟動時驗證連線。
  • [ ] 準備語句 (db.Prepare) 防止 SQL 注入並重用執行計畫。
  • [ ] 記錄慢查詢 (db.SetConnMaxLifetime 配合監控)。
  • [ ] 異常處理區分 sql.ErrNoRows、連線錯誤、資料錯誤。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved