分享
  1. 首页
  2. 文章

go语言连接mysql数据库

acmfly · · 5500 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

有疑问加站长微信联系(非本文作者)

本文来自:开源中国博客

感谢作者:acmfly

查看原文:go语言连接mysql数据库

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
5500 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏