go语言连接mysql数据库

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

    原文作者:数据库基础
    原文地址: https://my.oschina.net/acmfly/blog/118476
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞