[](https://res.cloudinary.com/practicaldev/image/fetch/s--c3PO1aYv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https ://thepracticaldev.s3.amazonaws.com/i/rv1of10dgk0c4wcph7bi.jpg)
如何使用 Golang 和 MySQL 数据库获取结果
Golang 通过标准的 Go-SQL 驱动程序包对 MySQL 等关系数据库以及 MongoDB 和 Redis 等 NoSQL 数据库提供了出色的支持。
使用标准 Go SQL 驱动程序包,您可以轻松地与数据库通信,包括 MySQL、MongoDB 或Golang 数据库驱动程序列表中的任何其他数据库。
SQL 标准包提供了一个通用接口,它公开了许多可用于访问和使用数据库的常用方法和接口。
如果使用正确,数据库包包含一个连接池并且是线程安全的。数据库包必须与支持特定数据库的驱动程序包一起使用。
连接MySQL
例如,如果您需要连接到 MySQL,那么您将使用 Golang 标准库中存在的通用 SQL 包以及使用标准库包方法和接口的 MySQL 特定包。
使用 Golang 编写 SQL 数据库驱动程序的人通常通过数据库 SQL 包公开他们的驱动程序。入口点代码存在于 SQL 驱动程序 Go 文件中。
基本上,它所做的是在包中的任何其他内容之前执行注册函数代码,在 init() 函数内部,另一个来自 SQL 包的函数称为 sql.Register(),它接受两个参数。第一个参数是一个字符串,表示您要使用的驱动程序类型,在本例中为“mysql”,第二个参数是一个对象,它表示与数据库交互并处理特定数据库功能的实际驱动程序。
sql.Register("mysql", &MySQLDriver{})
进入全屏模式 退出全屏模式
SQL 包是存在于 Go 标准库中的标准数据库 SQL 包。因为 init() 函数在其他任何事情之前被执行,所以您肯定知道,每当您在代码中包含包 MySQL 时,此代码将立即执行。
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
进入全屏模式 退出全屏模式
_
_
init()init()
这将使您能够直接在代码中使用数据库 SQL 包函数和方法,然后将该代码转换为 MySQL 驱动程序包中的具体实现。
重用数据库处理程序
将 db 声明为指向数据库处理程序的指针,可以在需要时重新使用数据库处理程序,而不是创建新的处理程序。
var db *sql.DB
进入全屏模式 退出全屏模式
sql.Open()
db, err = sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname")
进入全屏模式 退出全屏模式
sql.Open()
sql.Open()
sql.Open()
它需要一个用户名,然后是密码,然后是您将用于连接的协议,然后是数据库名称。
现在您已经准备好享受 Golang 和 MySQL 的乐趣了。
Query()QueryRow()
Query()
对于这个基本示例,在您的代码中,您将创建一个结构,该结构将保存从您的查询返回的数据。
type Product struct {
ProductCode, Name, Description, ImgURL string
Weight, Price float64
Stock int
}
进入全屏模式 退出全屏模式
sql.Open()
db, err = sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname").
进入全屏模式 退出全屏模式
db.Close()
sql.Open()time.Time[]byte / string
本质上,您会告诉 MySQL 驱动程序,您希望通过将 parseTime equals true 作为属性附加到连接字符串来将任何 MySQL 日期或日期/时间字段转换为 Golang 时间对象。
Product
func getProduct(productCode string) (err error){
...
var p Product
err := db.QueryRow("select productCode, name, description, imageURL, stock, weight, price from products WHERE productCode = ?", productCode).Scan(&p.ProductCode, &p.Name, &p.Description, &p.ImgURL, &p.Stock, &p.Weight, &p.Price)
...
进入全屏模式 退出全屏模式
QueryRow()QueryRow()
ProductCode
接下来,对于这个简单的示例,剩下要做的就是打印出我们的查询结果:
fmt.Printf("Product Code: %s\n Image URL: %s\n Product Name: %s\n Price: $%.2f\n Weight: %.2f\n Number in stock: %d\n", p.ProductCode, p.ImgURL, p.Name, p.Price, p.Weight, p.Stock)
进入全屏模式 退出全屏模式
getProduct()productCode
getProduct("g43")
[](https://res.cloudinary.com/practicaldev/image/fetch/s--YhzPQhLo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://storage. googleapis.com/golangme.com/static/img/golang-with-mysql-results.jpg)
Golang 与 MySQL 代码清单
希望这个简单的示例足以帮助您了解如何在 Golang 中使用数据库。