go語言連接mysql
一、安裝
在windows下安裝
1、goland(go IDE) 安裝位置: D:packagegoland2、go 安裝位置 : D:packagego3、GOPATH 位置: D:packagegoworkspaceD:packagegoworkspace 創建三個空文件夾 在GOPATH目錄下創建三個文件 bin 、src 、pkg4、GOROOT 位置: D:packagego5、配置正確的環境變數 在path中配置 GOPATH 和 GOROOT
在linux下安裝
1、解壓安裝包>tar -zxvf go1.7.6.linux-amd64.tar.gz2、安裝目錄為:/opt/go/go3、工作目錄為:/opt/go/workspace4、配置環境變數>vi ~/.bashrcexport GOROOT=/opt/go/goexport PATH=$GOROOT/bin:$PATHexport GOPATH=/opt/go/workspace5、刷新環境變數source ~/.bashrc6、執行測試程序test.go> go run test.go
二、安裝GIT
安裝git,為了用來下載mysql驅動包,此操作在Windows下執行
1、git安裝目錄為:D:packageGit2、給path中配置git的環境變數3、使用git下載mysql的驅動在Windows中 ,使用cmd切換到GOPATH的src目錄下 ,執行>go get github.com/go-sql-driver/MYSQL1)異常信息: fatal: unable to access https://github.com/go-sql-driver/MYSQL/: error setting certificate verify locations: CAfile: D:/package/Git/mingw64/libexec/ssl/certs/ca-bundle.crt CApath: none package github.com/go-sql-driver/MYSQL: exit status 1282)解決辦法: 在git安裝目錄下打開git-bash,執行以下命令即可; > git config --system http.sslverify false4、導入驅動包下載好驅動後可看到在GOPATH目錄下的src文件下生成github.com這個文件在go程序中導入以下包 import( "database/sql" _"github.com/Go-SQL-Driver/MySQL"//就是你下載的文件地址,如果是自己拷貝的,那麼就寫自己創建的路徑 "log" //"reflect" //獲取變數類型用 )
三、編譯程序
在Windows中編譯Windows可執行文件
1、在windows中,使用cmd切換到工程目錄中2、使用 go run project_name 即可執行程序;3、使用 go build projec_name 即可編譯程序;4、編譯好的程序執行執行即可。
在Windows中編譯linux可執行文件
1、首先需要設置以下兩個參數:set GOARCH=amd64set GOOS=linux2、編譯程序,使用go build 出來的就是linux 64 位的可執行程序了3、例如test.go 這個go程序 執行 go build test.go 生成編譯好的test文件 在linux機器中執行 ./test 即可。
四、連接腳本
package mainimport( "database/sql" _"github.com/Go-SQL-Driver/MySQL"//就是你下載的文件地址,如果是自己拷貝的,那麼就寫自己創建的路徑 "log" "fmt" "time")func main() { //username mysql賬號 var userName = "test2" //password mysql密碼 var passWord = "abc" //ip mysql資料庫的IP var ip = "192.168.136.136" //port mysql資料庫的埠 var port = "3306" // database 需要連接的資料庫名稱 var database = "test" dataSourceName := sourceName2(userName,passWord ,ip ,port ,database) //連接示例 // db,err := sql.Open("mysql","test2:abc@tcp(192.168.136.136:3306)/test?charset=utf8" ) conn,err := sql.Open("mysql",dataSourceName ) if err != nil{ panic(err.Error()) log.Println(err) return }else { fmt.Println("connection mysql succcess ! ") } defer conn.Close() //只有在前面用了 panic[拋出異常] 這時defer才能起作用,如果鏈接數據的時候出問題,他會往err寫數據。defer:延遲,這裡立刻申請了一個關閉sql 鏈接的草錯,defer 後的方法,或延遲執行。在函數拋出異常一會被執行 //產生查詢語句的Statement stmt, err := conn.Prepare(`show tables`) if err != nil { log.Fatal("Prepare failed:", err.Error()) } defer stmt.Close() //通過Statement執行查詢 rows, err := stmt.Query() if err != nil { log.Fatal("Query failed:", err.Error()) } //建立一個列數組 cols, err := rows.Columns() var colsdata = make([]interface{}, len(cols)) for i := 0; i < len(cols); i++ { colsdata[i] = new(interface{}) fmt.Print(cols[i]) fmt.Print(" ") } fmt.Println() //遍歷每一行 for rows.Next() { rows.Scan(colsdata...) //將查到的數據寫入到這行中 PrintRow(colsdata) //列印此行 } defer rows.Close()}//連接到mysqlfunc sourceName2(userName , passWord ,ip , port, database string) string{ var connection string connection = userName + ":" + passWord +"@tcp(" + ip + ":" + port + ")/"+database+"?charset=utf8" return connection}//列印一行記錄,傳入一個行的所有列信息func PrintRow(colsdata []interface{}) { for _, val := range colsdata { switch v := (*(val.(*interface{}))).(type) { case nil: fmt.Print("NULL") case bool: if v { fmt.Print("True") } else { fmt.Print("False") } case []byte: fmt.Print(string(v)) case time.Time: fmt.Print(v.Format) default: fmt.Print(v) } fmt.Print(" ") } fmt.Println()}
推薦閱讀:
TAG:Erlang編程語言 | Go語言 | PHP |