go語言串連mysql資料庫

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。go語言串連mysql資料庫


php雖然開發速度快,但是效能實在是有待提高。
C和C++?不擅長,讀別人的代碼都有困難,更不要提自己寫了。
經人介紹,開始使用go語言,開發速度比較快,效能也還不錯。


http://golang.org/


最近需要使用go語言串連mysql資料庫,
第一反應是去找官方的package:


http://golang.org/pkg/database/


有二個package,看起來都不靠譜:


sql:
Package sql provides a generic interface around SQL (or SQL-like) databases.
driver:
Package driver defines interfaces to be implemented by database drivers as used by package sql.
然後去 Go Project Dashboard 找找看,http://godashboard.appspot.com/
有幾個mysql相關的:


GoMySQL - MySQL library for Go lib
GoMySQL-Client-Library - Go MySQL Client Library lib
MyMySQL - MySQL Client API written entirely in Go. lib
go-dbd-mysql - A MySQL driver implementation for go-dbi lib
go-dbi - A database abstraction API in the spirit of Perl DBI et al lib
go-mysql - MySQL wrapper for Go cgo
go-mysql-driver - A lightweight and fast MySQL-Driver for Go's database/sql package lib
libmysqlgo - Another wrapper for the MySQL C API cgo
mysql-connector-go - implements MySQL wire protocol lib
mysqlgo - MySQL bindings cgo
GoMySQL go-dbd-mysql go-dbi go-mysql 安裝不了…不知道是環境問題還是什麼問題,沒細看。
GoMySQL-Client-Library 與 libmysqlgo 連結到404出錯頁面。
mysql-connector-go 連結到403出錯頁面…
mysqlgo已經defunct。
MyMySQL與go-mysql-driver安裝成功。


先看go-mysql-driver:


package main
 
import (
        "fmt"
)
 
 
import "database/sql"
import _ "code.google.com/p/go-mysql-driver/mysql"
 
 
 
 
func main() {
        db, _ := sql.Open("mysql", "test:123456@tcp(localhost:3306)/shipincon?charset=utf8")
 
        row := db.QueryRow("select nickname from user limit 1")
        var nickname string
        row.Scan(&nickname)
        fmt.Println(nickname)
        db.Exec("truncate table t");
 
        db.Exec("insert into t (select * from user order by user_id ASC limit 5)")
 
        rows, _ := db.Query("select nickname, user_id, type from t limit 2");
        for rows.Next() {
                var nickname string
                var t string
                var user_id string
 
                rows.Scan(&nickname, &user_id, &t)
                fmt.Println(nickname, user_id , t)
        }
 
}       
 
 
[root@www go]# go run test.go 
趙天化
趙天化 1 renren
劉流 2 renren
看起來不錯,挺好用的。
缺點?
rows.Scan的時候,表中的每一個col都需要一個變數與之對應,欄位多了不要累死?


MyMySQL在這方面就表現的比較好了:


package main
 
import (
        "fmt"
    //"os"
    "github.com/ziutek/mymysql/mysql"
    _ "github.com/ziutek/mymysql/native" // Native engine
    // _ "github.com/ziutek/mymysql/thrsafe" // Thread safe engine
)
 
func main() {
    db := mysql.New("tcp", "", "127.0.0.1:3306", "test", "123456", "shipincon")
 
    err := db.Connect()
    if err != nil {
        panic(err)
    }
 
        db.Query("set names utf8")
 
    rows, res, err := db.Query("select nickname,type,user_id from user  where user_id > %d limit 2", 20)
    if err != nil {
        panic(err)
    }
 
    for _, row := range rows {
        first := res.Map("user_id")
        second := res.Map("type")
        third := res.Map("nickname")
        val1, val2, val3 := row.Int(first), row.Str(second), row.Str(third)
        fmt.Println(val1, val2,val3 )
    }
}
 
[root@www go]# go run t.go 
34 renren 趙天祥
35 renren 劉靜
看起來MyMySQL更加成熟一些。


官方文檔:


http://go.pkgdoc.org/github.com/ziutek/mymysql
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.