以mysql爲例,go沒有實現鏈接數據庫的驅動,只是提供了接口,供第三方實現mysql
首先安裝第三方包git
cmd執行 go get 命令github
在執行go get 命令以前,確保你的電腦配置了環境變量GOPATH,而且安裝了gitsql
執行: 數據庫
go get github.com/go-sql-driver/mysql
接下來就會自動安裝了,安裝成功以後,就能夠使用了app
package main import ( _"github.com/go-sql-driver/mysql" "database/sql" "fmt" ) type Users struct{ username string pwd string } func main() { db,err := sql.Open("mysql","yld:1226@tcp(127.0.0.1:3306)/operation") if err != nil { fmt.Println(err) return } var users []Users = make([]Users,0) rows,err := db.Query("select username,pwd from user") defer rows.Close() if err != nil { fmt.Println(err) return } for rows.Next() { var u Users rows.Scan(&u.username,&u.pwd) users = append(users,u) } fmt.Println(users) }
其中,tcp
db,err := sql.Open("mysql","yld:1226@tcp(127.0.0.1:3306)/operation")
這句代碼應該是程序啓動就應該被執行的,不是真正的創建了鏈接,我理解的是創建了鏈接池,,ui
不該該被頻繁的open/close指針
本身又看了下row.Scan()這個方法,官方是這麼解釋的接口
將當前行中的列複製到dest指向的值,dest中的值的數量必須與Rows中的列數相同,Scan將從數據庫讀出來的列的值類型轉換爲如下常見的go類型和sql包提供的特殊類型以及任何實現了Scanner的類型
// *string // *[]byte // *int, *int8, *int16, *int32, *int64 // *uint, *uint8, *uint16, *uint32, *uint64 // *bool // *float32, *float64 // *interface{} // *RawBytes
在最簡單的狀況下,若是源列中的值的類型是整數,bool或字符串類型,則Scan只需經過指針分配值