回顾
https://blog.csdn.net/github_26672553/article/details/100011650
在前面使用第三方库,创建了简单的msyql代理服务。
我们可以:mysql -h127.0.0.1 -P4000 -uroot -p
就连接上了。
创建自己的Handler
conn, _ := server.NewConn(c, "root", "", server.EmptyHandler{})
查看前面代码,可以看出这里传入的是server.EmptyHandler{}
,是空Handler。
我们现在就要创建一个自己的Handler处理类。
1、新建util/MyHandler.go
文件:
type MyHandler struct {
server.EmptyHandler
}
然后就可以使用这个自定义的Handler:
conn, _ := server.NewConn(c, "root", "", util.MyHandler{})
2、完善自定义的Handler
写一个函数,作用创建Handler对象:
type MyHandler struct {
server.EmptyHandler
conn *client.Conn
}
//创建一个Handler
func NewMyHandler() MyHandler {
//连接真实的mysql服务器
c, err := client.Connect("localhost:3306", "root", "root", "test")
if err != nil {
log.Fatal(err)
}
return MyHandler{conn: c}
}
就可以这样(通过函数的方式)使用我们的handler了:
conn, _ := server.NewConn(c, "root", "", util.NewMyHandler())
3、继续完善自己的Handler类,支持sql查询,必须重写下面方法:
//重写HandlerQuery方法
func (this MyHandler) HandleQuery(query string) (*mysql.Result, error) {
result, err := this.conn.Execute(query)
if err != nil {
return nil, fmt.Errorf("Error:", err)
}
return result, nil
}
然后重启项目。
到终端连接上我们的mysql代理服务,执行sql查询语句:
这样就实现了一个简单的mysql支持查询的代理服务。
4、最后补充MyHandler.go
代码:
package util
import (
"fmt"
"github.com/siddontang/go-mysql/client"
"github.com/siddontang/go-mysql/mysql"
"github.com/siddontang/go-mysql/server"
"log"
)
type MyHandler struct {
server.EmptyHandler
conn *client.Conn
}
//重写HandlerQuery方法
func (this MyHandler) HandleQuery(query string) (*mysql.Result, error) {
result, err := this.conn.Execute(query)
if err != nil {
return nil, fmt.Errorf("Error:", err)
}
return result, nil
}
//创建一个Handler
func NewMyHandler() MyHandler {
//连接真实的mysql服务器
c, err := client.Connect("localhost:3306", "root", "root", "test")
if err != nil {
log.Fatal(err)
}
return MyHandler{conn: c}
}