首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Go 語言連接 MySQL 完整教學:從安裝到 CRUD 實戰

     編輯:MySQL 綜合教學

環境準備

# Ubuntu 安裝 MySQL
sudo apt-get install mysql-server   # 記住 root 密碼,假設 root123

# 進入 MySQL 建立測試環境
mysql -uroot -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';  -- 允許遠程
EXIT;

# 調整綁定 IP
sudo nano /etc/mysql/my.cnf
# bind-address = 127.0.0.1  改為  bind-address = 你的伺服器IP
sudo /etc/init.d/mysql restart

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

Go 專案引入驅動

go get github.com/go-sql-driver/mysql

驅動會下載至 $GOPATH/pkg/mod。

完整連線與查詢範例

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=utf8
    db, err := sql.Open("mysql", "peo:peo123@tcp(192.168.0.58:3306)/people?charset=utf8")
    if err != nil {
        panic(err)
    }
    defer db.Close()

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

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

關鍵點解析

  • 匿名導入:_ "github.com/go-sql-driver/mysql" 僅執行驅動的 init() 註冊自身。
  • 連線池:sql.Open 不會建立實際連線,首次 Query/Exec 才從連線池取出。
  • 錯誤處理:生產環境建議用 log.Fatal 或自定義錯誤類型,避免 panic 導致服務崩潰。
  • 參數化查詢:db.Query("SELECT ... WHERE id = ?", id) 防 SQL 注入。
  • JSON 序列化:結構體標籤 json:"field" 控制輸出鍵名。

常見坑位

  1. 遠程連線失敗:確認 bind-address、防火牆 3306、使用者 @'%' 權限。
  2. 編碼亂碼:DSN 加 ?charset=utf8mb4,資料表亦用 utf8mb4。
  3. 連線洩漏:務必 defer rows.Close()、defer db.Close()。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved