MySQL driver(驱动) liblbmysql for Go1

Go语言1.0出来之后,原来可用的MySQL驱动在新版本上基本不可用了,于是这几天自己写了个简单的MySQL的驱动,暂不支持prepare,没有implement sql/driver. 或许有能用的上的朋友,所以分享出来. 先介绍用法,后面提供下载链接.
先直接上例子

package main 

import (
“log”
“liblbmysql”
)

func main() {
settings := make(map[string]interface{})

settings["host"] = “localhost”
settings["port"] = 3306
settings["uname"] = “ivan”
settings["pass"] = “******”
settings["dbname"] = “test”
settings["charset"] = “utf8″

conn, err := liblbmysql.Connect(settings)
if err != nil {
log.Fatal(“Connect to MySQL error: %v”, err)
}

var qr *liblbmysql.QueryResult

qr, err = conn.ExecuteFetch(“select * from ivan”)
if err != nil {
log.Printf(“query error: %v”, err)
} else {
for {
m := qr.FetchMap()
if m != nil {
log.Printf(“row map: %v\n”, m)
} else {
break
}
}
}
qr.Free()
conn.Close()
}

 

  • 库名: package liblbmysql, 因此将 liblbmysql.a 保存到对应的pkg目录下,然后 import(“liblbmysql”)即可引入该mysql驱动
  • 连接MySQL配置参数: 类型:map[string]interface{}, 可配置的参数有host, port, unix_socket, uname, pass, dbname, charset 分别对应MySQL数据库的ip, 端口, unix socoket, 用户名,密码,初始化数据库,连接字符集.

相关方法\结果集\字段\记录等的类型定义:

type QueryResult struct {
Fields []Field
RowsAffected uint64
InsertId uint64
Rows [][]interface{}

type Field struct {
Name string
Type int64

}

func Connect(info map[string]interface{}) (conn *Connection, err error)

func (this *Connection) Begin() (err error)

func (this *Connection) Commit() (err error)

func (this *Connection) Rollback() (err error)

func (this *Connection) ExecuteFetch(query string) (qr *QueryResult, err error)

func (qr *QueryResult) FetchRow() []interface{}

func (qr *QueryResult) FetchRows() [][]interface{}

func (qr *QueryResult) FetchMap() map[string]interface{}

func (qr *QueryResult) Free()

这里QueryResult的Fetch函数返回的字段记录都是字符串结果,为了统一暂时没有将结果转换成Go语言中对应的数据类型,也是为了统一,方便程序员自己转换处理.

liblbmysql 下载地址:

PS: liblbmysql 取名由来 LegendBase driver for MySQL

 
分类: Go, MySQL 标签: ,

Go(golang) FastCGI Client

2012年6月1日 谭俊青 发表评论 阅读评论

 

最近用Go语言写给legendbase.com写网站的时候实现了个MVC框架,原理是根据uri请求,用reflect方法找到相应的controller跟method,然后执行之.当没有找到就根据uri后缀是否是php,如果是则调用fastcig-client执行配置目录下的php文件.如果再没有就写404错误. Go语言官方package没有client的实现,于是花了点功夫实现了个,开源出来,给需要的朋友节省点时间.

地址: http://code.google.com/p/go-fastcgi-client/

使用示例: 

func main() { 

reqParams := “name=value”

env := make(map[string]string)
env["REQUEST_METHOD"] = “GET”
env["SCRIPT_FILENAME"] = “/Users/ivan/work/test/fcgi/test.php”
env["SERVER_SOFTWARE"] = “go / fcgiclient ”
env["REMOTE_ADDR"] = “127.0.0.1″
env["SERVER_PROTOCOL"] = “HTTP/1.1″
env["QUERY_STRING"] = reqParams

fcgi, err := fcgiclient.New(“127.0.0.1″, 9000)
if err != nil {
fmt.Printf(“err: %v”, err)
}

content, err := fcgi.Request(env, reqParams)
if err != nil {
fmt.Printf(“err: %v”, err)
}

fmt.Printf(“content: %s”, content)
}

 
分类: Go 标签: ,

 

此条目发表在 未分类 分类目录。将固定链接加入收藏夹。

评论功能已关闭。