https://github.com/xwb1989/sqlparser
来自Vitess的SQL词法解析器, 被单独抽出来做为一个独立库,可以用来实现很多好玩的东西
Vitess使用SQL的词法解析来实现像数据自动分片这类功能.
sql := "SELECT * FROM test_table WHERE a = 'abc'"
stmt, err := sqlparser.Parse(sql)
if err != nil {
	// Do something with the err
}
// Otherwise do something with stmt
switch stmt := stmt.(type) {
case *sqlparser.Select:
	_ = stmt
case *sqlparser.Insert:
}
https://github.com/blastrain/vitess-sqlparser
这个添加了几个不支持的功能的实现
Compare SQL parser libraries in Go
| library | supports offset (or other complexity) query | supports DDL | 
|---|---|---|
| xwb1989/sqlparser | ✗ | △ | 
| zhenjl/sqlparser | ○ | △ | 
| knocknote/vitess-sqlparser | ○ | ○ | 
这个注明了需要go1.9版本以上
package main
import (
 	"fmt"
	"github.com/blastrain/vitess-sqlparser/sqlparser"
)
func main() {
	stmt, err := sqlparser.Parse("select * from user_items where user_id=1 order by created_at limit 3 offset 10")
	if err != nil {
		panic(err)
	}
	fmt.Printf("stmt = %+v\n", stmt)
}