go-mysqlでMySQL接続
GoでMySQLにつないでみました。
昨日の帰りがけに試してみて接続は正常、異常と確認出来ました。
connectとcloseしか作ってないので、SQL実行機能はまだ未実装です。
http://github.com/yone098/go-mysql
makeして、./sample実行で接続エラーが確認できます。
sample.go
package main import ( "mysql"; "log"; ) func main() { log.Stdoutf("this is mysql connect test\n"); conn, err := mysql.Connect("localhost", "baduser", "badpasswd", "baddb", 0, "", 0); if (err != nil) { log.Exitf("connect faled! errno:[%s] error:[%s]\n", err["errno"], err["error"]); } log.Stdoutf("connect success!\n"); mysql.Close(conn); }
mysql.go
package mysql // #include "mysql_wrapper.h" import "C" import ( "unsafe"; "fmt"; ) func Connect(host string, user string, passwd string, db string, port uint8, unix_socket string, client_flag uint32) (unsafe.Pointer, map[string] string) { conn := C.MySqlConnect(C.CString(host), C.CString(user), C.CString(passwd), C.CString(db), C.uint(port), C.CString(unix_socket), C.ulong(client_flag)); errno := C.MySqlErrno(conn); if (errno == 0) { return conn, nil; } return conn, map[string] string { "errno": fmt.Sprintf("%d", errno), "error": C.GoString(C.MySqlError(conn)), }; } func Close(conn unsafe.Pointer) { C.MySqlClose(conn); }
ちょうどsqlite3やpostgresqlで試していたみたいです。
http://d.hatena.ne.jp/tokuhirom/20091118/1258531456
http://d.hatena.ne.jp/oibore/20091114/1258191288
Cとの連携は、gmp.goを参考にすると良いです。
http://code.google.com/p/go/source/browse/misc/cgo/gmp/gmp.go?r=release