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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 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表中包括三个字段: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站也叫极客李华。大家喜欢也可以关注一下

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
人工智能 数据挖掘 API
基于neo4j数据库和dify大模型框架的rag模型搭建——后续补充
基于neo4j数据库和dify大模型框架的rag模型搭建——后续补充
272 21
基于neo4j数据库和dify大模型框架的rag模型搭建——后续补充
|
22天前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:路由、中间件、参数校验
Gin框架以其极简风格、强大路由管理、灵活中间件机制及参数绑定校验系统著称。本文详解其核心功能:1) 路由管理,支持分组与路径参数;2) 中间件机制,实现全局与局部控制;3) 参数绑定,涵盖多种来源;4) 结构体绑定与字段校验,确保数据合法性;5) 自定义校验器扩展功能;6) 统一错误处理提升用户体验。Gin以清晰模块化、流程可控及自动化校验等优势,成为开发者的优选工具。
|
2月前
|
Java 数据库 Docker
基于neo4j数据库和dify大模型框架的rag模型搭建
基于neo4j数据库和dify大模型框架的rag模型搭建
487 35
|
23天前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:使用 Gin 快速构建 Web 服务
Gin 是一个高效、轻量级的 Go 语言 Web 框架,支持中间件机制,非常适合开发 RESTful API。本文从安装到进阶技巧全面解析 Gin 的使用:快速入门示例(Hello Gin)、定义 RESTful 用户服务(增删改查接口实现),以及推荐实践如参数校验、中间件和路由分组等。通过对比标准库 `net/http`,Gin 提供更简洁灵活的开发体验。此外,还推荐了 GORM、Viper、Zap 等配合使用的工具库,助力高效开发。
|
3月前
|
SQL 数据库连接 数据库
在C++的QT框架中实现SQLite数据库的连接与操作
以上就是在C++的QT框架中实现SQLite数据库的连接与操作的基本步骤。这些步骤包括创建数据库连接、执行SQL命令、处理查询结果和关闭数据库连接。在实际使用中,你可能需要根据具体的需求来修改这些代码。
213 14
|
3月前
|
Oracle 关系型数据库 Linux
YashanDB异构数据库链接配置
本指南介绍在YashanDB中配置异构数据库链接(DBLINK)的方法,特别是连接至Oracle数据库的前置要求与步骤。需确保YashanDB服务端安装plugin插件包、Oracle Instant Client及libaio库,否则可能导致错误或进程崩溃。文档还提供了Oracle Instant Client和libaio库的具体安装指导,帮助管理员顺利完成配置。
|
5月前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
421 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
5月前
|
开发框架 前端开发 Go
eino — 基于go语言的大模型应用开发框架(二)
本文介绍了如何使用Eino框架实现一个基本的LLM(大语言模型)应用。Eino中的`ChatModel`接口提供了与不同大模型服务(如OpenAI、Ollama等)交互的统一方式,支持生成完整响应、流式响应和绑定工具等功能。`Generate`方法用于生成完整的模型响应,`Stream`方法以流式方式返回结果,`BindTools`方法为模型绑定工具。此外,还介绍了通过`Option`模式配置模型参数及模板功能,支持基于前端和用户自定义的角色及Prompt。目前主要聚焦于`ChatModel`的`Generate`方法,后续将继续深入学习。
728 7
|
5月前
|
存储 开发框架 Devops
eino — 基于go语言的大模型应用开发框架(一)
Eino 是一个受开源社区优秀LLM应用开发框架(如LangChain和LlamaIndex)启发的Go语言框架,强调简洁性、可扩展性和可靠性。它提供了易于复用的组件、强大的编排框架、简洁明了的API、最佳实践集合及实用的DevOps工具,支持快速构建和部署LLM应用。Eino不仅兼容多种模型库(如OpenAI、Ollama、Ark),还提供详细的官方文档和活跃的社区支持,便于开发者上手使用。
1106 8
|
4月前
|
Oracle 关系型数据库 Java

热门文章

最新文章