go语言 tcp eof_30行Go语言代码实现Mini的MySQL Server

先上代码

package mainimport (  "log"  sqle "github.com/liquidata-inc/go-mysql-server"  "github.com/liquidata-inc/go-mysql-server/auth"  "github.com/liquidata-inc/go-mysql-server/memory"  "github.com/liquidata-inc/go-mysql-server/server")func main() {  driver := sqle.NewDefault()  db := memory.NewDatabase("test")  driver.AddDatabase(db)  config := server.Config{    Protocol: "tcp",    Address:  "localhost:3306",    Auth:     auth.NewNativeSingle("root", "", auth.AllPermissions),  }  s, err := server.NewDefaultServer(config, driver)  if err != nil {    log.Fatal(err)  }  defer s.Close()  s.Start()}

从上面代码可以看出,该实现完全依赖go-mysql-server

  • 纯Go语言实现

  • 是一个SQL引擎,用于解析标准SQL(基于MySQL语法),解析和优化查询。它提供了简单的界面,以允许自定义表格数据源实现。

  • 还提供了与MySQL协议兼容的服务器实现。这意味着它与MySQL ODBC,JDBC或默认的MySQL客户端兼容。

db := memory.NewDatabase("test")

创建一个名为test的内存数据库

  config := server.Config{    Protocol: "tcp",    Address:  "localhost:3306",    Auth:     auth.NewNativeSingle("root", "", auth.AllPermissions),  }
  • 使用tcp协议

  • 服务器地址为localhost

  • 端口为3306

  • 用户名为root

  • 密码为空

编译运行

$go build ./srv

客户端连接测试

7ff171b7f2cfc732ba8f0360e81cf40e.png

Go语言客户端代码测试

package mainimport (  "fmt"  "log"  _ "github.com/go-sql-driver/mysql"  "github.com/jmoiron/sqlx")//Client just a examplefunc main() {  url:="root:@tcp(127.0.0.1:3306)/test"  db, err := sqlx.Open("mysql", url)  if err != nil {    log.Fatal(err)  }  defer db.Close()  ddl := `  CREATE TABLE products0 (    product_id smallint NOT NULL,    product_name character varying(40) NOT NULL,    supplier_id smallint,    category_id smallint,    quantity_per_unit character varying(20),    unit_price real,    units_in_stock smallint,    units_on_order smallint,    reorder_level smallint,    discontinued integer NOT NULL  );  `  _, err = db.Exec(ddl)  if err != nil {    log.Fatal(err)  }  rows, err := db.Query("show create table  products0;")  if err != nil {    log.Fatal(err)  }  for rows.Next() {    var table string    var schema string    if err := rows.Scan(&table, &schema); err != nil {      log.Fatal(err)    }    fmt.Println(table)    fmt.Println(schema)  }}

运行,返回,

products0CREATE TABLE `products0` (  `product_id` smallint NOT NULL,  `product_name` varchar(40) NOT NULL,  `supplier_id` smallint,  `category_id` smallint,  `quantity_per_unit` varchar(20),  `unit_price` double,  `units_in_stock` smallint,  `units_on_order` smallint,  `reorder_level` smallint,  `discontinued` int NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

基于go-mysql-server的开源实现

  • dolt

  • gitbase

两个都和Git有关的服务器

参考

  • https://github.com/src-d/gitbase

  • https://github.com/src-d/go-mysql-server

  • https://github.com/liquidata-inc/dolt

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值