go语言使用Gin框架链接数据库

go语言使用Gin框架链接数据库

简介

本文讲解如何使用go语言链接数据库

以下是一些用Gin框架链接数据库的步骤:

假设您选择的数据库是MySQL,首先需要在系统中安装相应的MySQL数据库,并创建一个名为“testdb”的数据库。

  1. 安装go-sql-driver驱动程序。在命令行终端中键入以下命令:
go get github.com/go-sql-driver/mysql

输入下载之后可以看见的是,在go.sum里面就有了相关的包
在这里插入图片描述

  1. 导入所需的包。在代码文件的顶部,使用以下语句导入所需的包:
import (
    "database/sql"
    "fmt"
    "log"

    _ "github.com/go-sql-driver/mysql"
)
  1. 创建数据库连接池对象。在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
}
  1. 在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表中包括三个字段:idusernameemail,其中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站也叫极客李华。大家喜欢也可以关注一下

要在Gin框架中连接MySQL数据库,你需要进行以下步骤: 1. 首先,确保你已经安装了MySQL数据库,并且可以通过用户名和密码访问它。 2. 在你的代码中引入必要的库。使用`go get`命令安装`github.com/go-sql-driver/mysql`和`github.com/gin-gonic/gin`两个库。 3. 创建一个数据库连接。在你的代码中使用`sql.Open`函数创建一个数据库连接对象,并指定MySQL的驱动名称和连接参数。 ```go import ( "database/sql" "github.com/go-sql-driver/mysql" "github.com/gin-gonic/gin" ) func main() { dsn := "username:password@tcp(localhost:3306)/database_name" db, err := sql.Open("mysql", dsn) if err != nil { panic(err) } defer db.Close() // 其他代码... router := gin.Default() // 路由处理函数... router.Run(":8080") } ``` 这里的`username`是你的MySQL用户名,`password`是你的MySQL密码,`localhost:3306`是MySQL服务器地址和端口号,`database_name`是你要连接的数据库名称。 4. 执行查询或操作数据库使用创建的数据库连接对象执行查询或操作数据库的操作。 ```go func main() { // 创建数据库连接... // 查询数据示例 rows, err := db.Query("SELECT * FROM table_name") if err != nil { panic(err) } defer rows.Close() // 处理查询结果... // 插入数据示例 result, err := db.Exec("INSERT INTO table_name (column1, column2) VALUES (?, ?)", value1, value2) if err != nil { panic(err) } // 其他操作... } ``` 这里的`table_name`是你要查询或操作的表名,`column1`和`column2`是表中的列名,`value1`和`value2`是要插入的值。 这是一个简单的示例,你可以根据你的需求进行更复杂的查询和操作。记得在适当的地方处理错误和释放资源。希望这可以帮助到你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客李华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值