這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
轉自:Golang串連Mysql
首先go-driver-sql的mysql版本,我通過
go get code.google.com/p/go-mysql-driver/mysql
安裝失敗,貌似是git版本不夠新的緣故,不過用不著這麼麻煩,直接去github下載原始碼即可,解壓到/usr/local/go/src/pkg/mysql目錄
package main// 匯入sql包, 跟java.sql類似的import "database/sql"import _ "mysql"import "encoding/json"import "fmt"// 定義一個結構體, 需要大寫開頭哦, 欄位名也需要大寫開頭哦, 否則json模組會識別不了// 結構體成員僅大寫開頭外界才能訪問type User struct { User string `json:"user"` Password string `json:"password"` Host string `json:"host"`}// 一如既往的main方法func main() { // 格式有點怪, @tcp 是指網路通訊協定(難道支援udp?), 然後是網域名稱和連接埠 db, e := sql.Open("mysql", "root:pwd@tcp(localhost:3306)/mysql?charset=utf8") if e != nil { //如果串連出錯,e將不是nil的 fmt.Println("ERROR?") return } // 提醒一句, 運行到這裡, 並不代表資料庫連接是完全OK的, 因為發送第一條SQL才會校正密碼 汗~! _, e2 := db.Query("select 1")//生產環境去掉這句,不然會有記憶體流失 if e2 == nil { fmt.Println("DB OK") rows, e := db.Query("select user,password,host from mysql.user") if e != nil { fmt.Print("query error!!%v\n", e) return } if rows == nil { fmt.Println("Rows is nil") return } for rows.Next() { //跟java的ResultSet一樣,需要先next讀取 user := new(User) // rows貌似只支援Scan方法 繼續汗~! 當然,可以通過GetColumns()來得到欄位順序 row_err := rows.Scan(&user.User,&user.Password, &user.Host) if row_err != nil { fmt.Println("Row error!!") return } b, _ := json.Marshal(user) fmt.Println(string(b)) // 這裡沒有判斷錯誤, 呵呵, 一般都不會有錯吧 } fmt.Println("Done") } else { fmt.Println(e) }}