go mysql_从Go连接到MySQL的推荐方法是什么?

我正在寻找一个可靠的解决方案来连接到Go的MySQL数据库。我见过一些库,但很难确定完整性和当前维护的不同状态。我没有复杂的需求,但我想知道人们依赖什么,或者什么是连接MySQL的最标准的解决方案。

4a3abb8fe4b4d9584379c47f04e8e0be.png

最佳解决方案

有一些驱动程序可用,但您应该只考虑那些实现了database/sql API的驱动程序,及满足如下条件:

提供了一个干净有效的语法,

确保您可以在不更改代码的情况下更改驱动程序,除了导入和连接。

两个快速可靠的驱动程序可用于MySQL:

我在生产中使用了它们,程序运行了几个月,数百万的连接数没有出现过失败的情况。

使用MyMySQL时导入:

import (

"database/sql"

_ "github.com/ziutek/mymysql/godrv"

)

使用Go-MySQL-Driver时导入:

import (

"database/sql"

_ "github.com/go-sql-driver/mysql"

)

使用MyMySQL连接和关闭:

con, err := sql.Open("mymysql", database+"/"+user+"/"+password)

defer con.Close()

// here you can use the connection, it will be closed when function returns

使用Go-MySQL-Driver连接和关闭:

con, err := sql.Open("mysql", store.user+":"+store.password+"@/"+store.database)

defer con.Close()

选择一行:

row := con.QueryRow("select mdpr, x, y, z from sometable where id=?", id)

cb := new(SomeThing)

err := row.Scan(&cb.Mdpr, &cb.X, &cb.Y, &cb.Z)

选择多行并构建一个包含结果的数组:

rows, err := con.Query("select a, b from item where p1=? and p2=?", p1, p2)

if err != nil { /* error handling */}

items := make([]*SomeStruct, 0, 10)

var ida, idb uint

for rows.Next() {

err = rows.Scan(&ida, &idb)

if err != nil { /* error handling */}

items = append(items, &SomeStruct{ida, idb})

}

插入 :

_, err = con.Exec("insert into tbl (id, mdpr, isok) values (?, ?, 1)", id, mdpr)

你会发现在Go with MySQL中工作是一种愉快的体验:我从来没有遇到过问题,我的服务器运行了几个月而没有错误或泄漏。大多数函数只是采用可变数量的参数这一事实减轻了许多语言中繁琐的任务。

请注意,如果将来需要使用另一个MySQL驱动程序,则只需在一个go文件中更改两行:执行导入的行和打开连接的行。

2cb9c1deb5f1a30e69ebb2e2968bfd3c.png

参考资料

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值