go语言使用Gin框架链接数据库
简介
本文讲解如何使用go语言链接数据库
以下是一些用Gin框架链接数据库的步骤:
假设您选择的数据库是MySQL,首先需要在系统中安装相应的MySQL数据库,并创建一个名为“testdb”的数据库。
- 安装go-sql-driver驱动程序。在命令行终端中键入以下命令:
go get github.com/go-sql-driver/mysql
输入下载之后可以看见的是,在go.sum里面就有了相关的包
- 导入所需的包。在代码文件的顶部,使用以下语句导入所需的包:
import ( "database/sql" "fmt" "log" _ "github.com/go-sql-driver/mysql" )
- 创建数据库连接池对象。在main函数或自定义函数中,连接到MySQL数据库并创建一个新的数据库连接池。
func connectToDatabase() (*sql.DB, error) { // Set up the database source string. dataSourceName := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", username, password, host, port, dbname) // Create a database handle and open a connection pool. db, err := sql.Open("mysql", dataSourceName) if err != nil { return nil, err } // Check if our connection is alive. err = db.Ping() if err != nil { return nil, err } return db, nil }
- 在router函数(或需链接数据库的任何其他函数)中创建一个新的连接,并从连接池获取连接。使用上述步骤中的connectToDatabase函数,在需要时调用它以获取与MySQL数据库的连接。以下是一个简单的示例:
func main() { // Connect to the database. db, err := connectToDatabase() if err != nil { log.Fatal(err) } // Close the database connection pool after the main function returns. defer db.Close() // Create a new Gin router instance. r := gin.Default() // ... // Serve HTTP requests using the Gin router. r.Run(":8080") }
创建数据库
代码演示数据库
-- 创建 testdb 数据库 CREATE DATABASE testdb; -- 使用 testdb 数据库空间 USE testdb; -- 创建 users 表并插入2条数据 CREATE TABLE users ( id INT(11) NOT NULL AUTO_INCREMENT, username VARCHAR(100) NOT NULL, email VARCHAR(100) NOT NULL, PRIMARY KEY (id) ); INSERT INTO users (username, email) VALUES ('user1', 'user1@example.com'); INSERT INTO users (username, email) VALUES ('user2', 'user2@example.com');
这个MySQL数据库中包含了一个名为testdb的数据库,以及一个名为users的表。users表中包括三个字段:id、username和email,其中id为主键,并自增。
可以使用MySQL客户端连接到该数据库(默认端口为3306),或者通过终端命令行使用以下命令查看该表中的数据:
USE testdb; SELECT * FROM users;
输出应该如下所示:
+----+----------+------------------+ | id | username | email | +----+----------+------------------+ | 1 | user1 | user1@example.com | | 2 | user2 | user2@example.com | +----+----------+------------------+
完整代码
package main import ( "database/sql" // 数据库操作相关的包 "fmt" "log" // 日志处理包 "github.com/gin-gonic/gin" // Gin框架 _ "github.com/go-sql-driver/mysql" // 加载MySQL驱动 ) const ( username = "yourname" password = "yourpassword" host = "localhost" port = 3306 dbname = "testdb" ) type user struct { ID int `json:"id"` Username string `json:"username"` Email string `json:"email"` } // 连接数据库的函数。返回一个 *sql.DB 对象以及一个 error 对象 (如果连接不成功)。 func connectToDatabase() (*sql.DB, error) { dataSourceName := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", username, password, host, port, dbname) db, err := sql.Open("mysql", dataSourceName) // 打开名为 MySQL 的SQL数据库 if err != nil { return nil, err } err = db.Ping() // 检查连接是否建立,以确保连接存活 if err != nil { return nil, err } return db, nil } func main() { db, err := connectToDatabase() // 与 MySQL 数据库建立连接 if err != nil { log.Fatal(err) } defer db.Close() // 延迟执行,确保在 main 函数退出时关闭数据库连接 r := gin.Default() // 创建一个Gin路由器实例 r.GET("/users/:id", func(c *gin.Context) { // 定义一个路由处理函数,用于从数据库中检索用户信息 var ( user user // 用户结构体,用于存储结果查询的记录 result gin.H // Gin框架使用的Map集合类型,用于将结果渲染为 JSON 格式并发送给客户端 ) id := c.Param("id") // 获取参数id row := db.QueryRow("SELECT id, username, email FROM users WHERE id = ?", id) // 执行 SQL 查询,并返回*sql.Row对象,其中包含结果集的单行记录 err = row.Scan(&user.ID, &user.Username, &user.Email) // 将行数据扫描到user 结构体内,分别对应结果集中的前3列(id,username,email) if err != nil { result = gin.H{ "message": "User not found", // 如果错误则返回 error 消息 } } else { result = gin.H{ "data": user, //返回查询结果 } } c.JSON(200, result) // 渲染result Map集合成JSON格式,并发送响应消息给客户端 }) r.Run(":8080") // 启动服务器并在本地机器上监听端口号为8080的请求 }
运行代码
测试成功
如果大家觉得有用的话,可以关注我下面的微信公众号,极客李华,我会在里面更新更多行业资讯,企业面试内容,编程资源,如何写出可以让大厂面试官眼前一亮的简历等内容,让大家更好学习编程,我的抖音,B站也叫极客李华。大家喜欢也可以关注一下