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