這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
1. 說明
最原始的參數化SQL語句,ORM可以參考begoo。
2. 安裝驅動
go get github.com/go-sql-driver/mysql
3. 操作樣本
package mainimport ( "fmt" "database/sql" _ "github.com/go-sql-driver/mysql")type TestMysql struct { db *sql.DB}/* 初始化資料庫引擎 */func Init() (*TestMysql, error) { test := new(TestMysql); db, err := sql.Open("mysql", "root:yccy@/gotest"); //第一個參數 : 資料庫引擎 //第二個參數 : 資料庫DSN配置。Go中沒有統一DSN,都是資料庫引擎自己定義的,因此不同引擎可能配置不同 if err != nil { fmt.Println("database initialize error : ", err.Error()); return nil, err; } test.db = db; return test, nil;}/* 測試資料庫資料添加 */func (test *TestMysql)Create() { if test.db == nil { return; } stmt, err := test.db.Prepare("insert into test(name,age)values(?,?)"); if err != nil { fmt.Println(err.Error()); return; } defer stmt.Close(); if result, err := stmt.Exec("張三", 20); err == nil { if id, err := result.LastInsertId(); err == nil { fmt.Println("insert id : ", id); } } if result, err := stmt.Exec("李四", 30); err == nil { if id, err := result.LastInsertId(); err == nil { fmt.Println("insert id : ", id); } } if result, err := stmt.Exec("王五", 25); err == nil { if id, err := result.LastInsertId(); err == nil { fmt.Println("insert id : ", id); } }}/* 測試資料庫資料更新 */func (test *TestMysql)Update() { if test.db == nil { return; } stmt, err := test.db.Prepare("update test set name=?,age=? where age=?"); if err != nil { fmt.Println(err.Error()); return; } defer stmt.Close(); if result, err := stmt.Exec("周七", 40, 25); err == nil { if c, err := result.RowsAffected(); err == nil { fmt.Println("update count : ", c); } }}/* 測試資料庫資料讀取 */func (test *TestMysql)Read() { if test.db == nil { return; } rows, err := test.db.Query("select id,name,age from test limit 0,5"); if err != nil { fmt.Println(err.Error()); return; } defer rows.Close(); fmt.Println(""); cols, _ := rows.Columns(); for i := range cols { fmt.Print(cols[i]); fmt.Print("\t"); } fmt.Println(""); var id int; var name string; var age int; for rows.Next() { if err := rows.Scan(&id, &name, &age); err == nil { fmt.Print(id); fmt.Print("\t"); fmt.Print(name); fmt.Print("\t"); fmt.Print(age); fmt.Print("\t\r\n"); } }}/* 測試資料庫刪除 */func (test *TestMysql)Delete() { if test.db == nil { return; } stmt, err := test.db.Prepare("delete from test where age=?"); if err != nil { fmt.Println(err.Error()); return; } defer stmt.Close(); if result, err := stmt.Exec(20); err == nil { if c, err := result.RowsAffected(); err == nil { fmt.Println("remove count : ", c); } }}func (test *TestMysql)Close() { if test.db != nil { test.db.Close(); }}func main() { if test, err := Init(); err == nil { test.Create(); test.Update(); test.Read(); test.Delete(); test.Read(); test.Close(); }}
參考代碼被轉載了N次,沒找到出處,部分過時內容,進行了修改。