如何使用Golang,Gin和Postgresql构建CRUD应用程序

如何使用golang,gin和postgresql构建crud应用程序

本教程演示如何使用Go语言、Gin框架和PostgreSQL数据库构建一个简单的CRUD (创建、读取、更新、删除) 应用。最终,您将得到一个可以管理PostgreSQL数据库中数据的基本应用。

目录

简介前提条件项目结构项目设置创建数据库和表编写CRUD处理程序测试API总结

1. 简介

我们将使用Gin (一个轻量级的Go Web框架) 构建API端点。应用将连接到PostgreSQL数据库,并使用pgx驱动程序进行数据库交互。

立即学习“go语言免费学习笔记(深入)”;

本教程面向初学者,假设您已具备Go语言和REST API的基础知识。

2. 前提条件

开始之前,请确保您的系统已安装以下软件:

Go语言 (1.20或更高版本)PostgreSQL (任意版本)Postman或其他API测试工具代码编辑器 (例如VS Code)

3. 项目结构

项目的文件夹结构如下:

crud-app/├── main.go            # 应用入口├── config/│   └── database.go    # 数据库连接配置├── controllers/│   └── item.go        # "item"资源的CRUD处理程序├── models/│   └── item.go        # "item"数据库模型├── routes/│   └── routes.go      # API路由定义├── go.mod             # Go模块文件└── go.sum             # 依赖文件

登录后复制

此结构简单易扩展。您可以稍后添加更多资源(例如“用户”或“订单”),而不会影响项目结构。

4. 项目设置

首先,创建项目文件夹并初始化Go模块:

mkdir crud-appcd crud-appgo mod init github.com/yourusername/crud-app

登录后复制

然后,安装必要的包:

go get github.com/gin-gonic/gingo get github.com/jackc/pgx/v5

登录后复制

5. 创建数据库和表

创建一个PostgreSQL数据库和一个表,例如名为“items”的表:

CREATE DATABASE crud_app;c crud_appCREATE TABLE items (    id SERIAL PRIMARY KEY,    name TEXT NOT NULL,    description TEXT,    price NUMERIC(10, 2));

登录后复制

6. 编写CRUD处理程序

数据库连接配置

在config/database.go中:

package configimport (    "database/sql"    "fmt"    "log"    _ "github.com/jackc/pgx/v5/stdlib")var db *sql.DBfunc ConnectDatabase() {    var err error    dsn := "postgres://username:password@localhost:5432/crud_app"    db, err = sql.Open("pgx", dsn)    if err != nil {        log.Fatalf("无法连接到数据库: %v", err)    }    fmt.Println("数据库连接成功!")}

登录后复制

请使用您的PostgreSQL用户名和密码更新dsn字符串。

模型定义

在models/item.go中:

package modelstype Item struct {    ID          int     `json:"id"`    Name        string  `json:"name"`    Description string  `json:"description"`    Price       float64 `json:"price"`}

登录后复制

处理程序编写

在controllers/item.go中:

package controllersimport (    "crud-app/config"    "crud-app/models"    "github.com/gin-gonic/gin"    "net/http")// 创建新的itemfunc CreateItem(c *gin.Context) {    var item models.Item    if err := c.ShouldBindJSON(&item); err != nil {        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})        return    }    query := "INSERT INTO items (name, description, price) VALUES ($1, $2, $3) RETURNING id"    err := config.db.QueryRow(query, item.Name, item.Description, item.Price).Scan(&item.ID)    if err != nil {        c.JSON(http.StatusInternalServerError, gin.H{"error": "创建item失败"})        return    }    c.JSON(http.StatusCreated, item)}

登录后复制

您可以编写类似的处理程序来读取、更新和删除项目。

路由定义

在routes/routes.go中:

package routesimport (    "crud-app/controllers"    "github.com/gin-gonic/gin")func SetupRoutes(router *gin.Engine) {    router.POST("/items", controllers.CreateItem)    // 添加更多路由用于读取、更新、删除}

登录后复制

主程序

在main.go中:

package mainimport (    "crud-app/config"    "crud-app/routes"    "github.com/gin-gonic/gin")func main() {    config.ConnectDatabase()    r := gin.Default()    routes.SetupRoutes(r)    r.Run(":8080") // 在8080端口启动服务器}

登录后复制

7. 测试API

启动服务器:

go run main.go

登录后复制

使用Postman或curl测试端点。例如,创建一个项目:

POST http://localhost:8080/items

请求体:

{  "name": "Laptop",  "description": "一台强大的笔记本电脑",  "price": 1200.50}

登录后复制

8. 总结

恭喜!您已成功使用Go、Gin和PostgreSQL构建了一个基本的CRUD应用。此结构易于扩展,您可以添加更多功能,例如身份验证、日志记录或中间件。 如有需要更详细的步骤或附加功能,请随时提出!

以上就是如何使用Golang,Gin和Postgresql构建CRUD应用程序的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2477078.html

(0)
上一篇 2025年3月4日 19:18:59
下一篇 2025年2月18日 10:57:44

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 实时批处理

    高效批处理:实时数据处理的优雅方案 批处理是优化数据库操作的常用技术,广泛应用于数据库、Redis和各种批量API中。其优势在于速度更快、成本更低且速度限制更低,但代价是代码复杂度略有提升。本文探讨如何优雅地处理实时到达的数据批处理问题。 …

    2025年3月4日
    200
  • Golang文本/模板中的SQL查询

    在使用Go的text/template包动态生成SQL查询构建后端API时,提高开发效率的同时,务必注意SQL注入的风险。本文将演示如何避免这种风险。 text/template的SQL注入漏洞示例 以下代码片段展示了如何通过字符串插值构建…

    2025年3月4日
    200
  • GO中的数据处理管道(Golang)

    Go语言数据处理管道详解 Go语言中的数据处理管道是一种将数据处理流程分解成一系列阶段或步骤的模式。每个阶段对数据执行特定操作,前一阶段的输出作为下一阶段的输入。这种模式广泛应用于ETL(提取、转换、加载)、流处理和批处理等场景。Go语言利…

    2025年3月4日
    200
  • 不要浪费时间 – 立即消除Golang!

    还在犹豫是否学习Golang?作为开发者,您可能已经错过了很多机会!近年来,行业对更快、更简洁、更可靠代码的需求日益增长。虽然JavaScript、Java和Python各有优势,但Golang凭借其速度、简洁性和并发性脱颖而出,让您在竞争…

    2025年3月4日
    200
  • Go HTTP文件下载文件名错乱:如何正确设置HTTP Header实现文件下载?

    go http文件下载文件名混乱:正确设置http header实现精准文件下载 使用Go语言的http包提供本地文件下载服务时,下载后的文件名经常与原始文件名不符,导致文件下载失败。本文分析了这个问题,并提供了解决方案。 问题根源 问题在…

    2025年3月4日
    200
  • Go HTTP文件下载:文件名错误如何解决?

    Go语言HTTP文件下载文件名错误的解决方法 在使用Go语言的http包提供本地文件下载服务时,经常会遇到下载文件名与实际文件名不符的问题,例如下载文件名显示为”response.html”。本文将分析这个问题的原因…

    2025年3月4日
    200
  • Go语言HTTP下载文件文件名错误如何修复?

    Go语言HTTP文件下载:文件名修复指南 问题: 使用Go语言的http包提供文件下载服务时,下载文件名可能与源文件名不一致。例如,源文件名为file.docx,但下载后文件名却变成了response.html。即使设置了header也无法…

    2025年3月4日
    200
  • 如何解密JWT Token并提取用户ID?

    轻松提取JWT Token中的用户ID 本文介绍如何从JWT (JSON Web Token) 字符串中提取用户ID。JWT由三个部分组成,用点号(.)分隔:头部、有效载荷和签名。有效载荷包含用户信息,例如用户ID、过期时间等,并以Base…

    2025年3月4日
    200
  • Go语言中如何高效查找字符串中第一个出现的指定字符?

    Go语言高效查找字符串中第一个指定字符的方法 在Go语言中,查找字符串中第一个出现的特定字符,并非只能依赖索引比较。 更高效的方法是直接遍历字符串的字符范围。 以下Go代码片段展示了这种高效的查找方法: func findFirstChar…

    2025年3月4日
    200
  • PHP支付回调如何保证数据一致性?

    PHP支付回调:确保数据一致性的策略 支付完成后,需要对订单进行一系列操作,例如更新订单状态、减少库存、使用优惠券和积分等。为了确保这些操作的原子性,避免数据不一致,数据库事务机制是关键。 利用数据库事务保证数据一致性 数据库事务将多个操作…

    2025年3月4日
    200

发表回复

登录后才能评论