https://github.com/ziutek/mymysql
可以做到。尽管您必须使用其接口与已定义的接口。go官方接口无法处理它,或有多个返回值。
package mainimport ( "flag" "fmt" "github.com/ziutek/mymysql/autorc" "github.com/ziutek/mymysql/mysql" _ "github.com/ziutek/mymysql/thrsafe")type ScanFun func(int, []mysql.Row, mysql.Result) errorfunc RunSQL(hostport, user, pass, db, cmd string, scan ScanFun) error { conn := autorc.New("tcp", "", hostport, user, pass, db) err := conn.Reconnect() if err != nil { return err } res, err := conn.Raw.Start(cmd) if err != nil { return err } rows, err := res.GetRows() if err != nil { return err } RScount := 0 scanErr := error(nil) for { if scanErr == nil { func() { defer func() { if x := recover(); x != nil { scanErr = fmt.Errorf("%v", x) } }() scanErr = scan(RScount, rows, res) }() } if res.MoreResults() { res, err = res.NextResult() if err != nil { return err } rows, err = res.GetRows() if err != nil { return err } } else { break } RScount++ } return scanErr}func main() { host := flag.String("host", "localhost:3306", "define the host where the db is") user := flag.String("user", "root", "define the user to connect as") pass := flag.String("pass", "", "define the pass to use") db := flag.String("db", "information_schema", "what db to default to") sql := flag.String("sql", "select count(*) from columns; select * from columns limit 1;", "Query to run") flag.Parse() scan := func(rcount int, rows []mysql.Row, res mysql.Result) error { if res.Statusonly() { return nil } for idx, row := range rows { fmt.Print(rcount, "-", idx, ") ") for i, _ := range row { fmt.Print(row.Str(i)) fmt.Print(" ") } fmt.Println("") } return nil } fmt.Println("Host - ", *host) fmt.Println("Db - ", *db) fmt.Println("User - ", *user) if err := RunSQL(*host, *user, *pass, *db, *sql, scan); err != nil { fmt.Println(err) }}


