TMDOG的Gin学习笔记_01——初识Gin框架

devtools/2024/11/7 14:54:07/

TMDOG的Gin学习笔记_01——初识Gin框架

博客地址:[TMDOG的博客](https://blog.tmdog114514.icu)

作者自述:
停更太久了,是因为开学了课太多了,并且我一直在准备上篇文章的内容正在coding,就先搁置了更新博客QAQ,现在终于闲下来了。

​ 说实话挺久没有进行golang的编程了,但以前上课系统学习了golang并且期末项目就是使用beego实现的[CRM管理系统](https://gitee.com/mbjdot/biego-final-project)(可以康康),所以上手gin还是比较快的。

学习目标

使用Gin框架实现一个微服务,并整合到上篇博客的项目中。
预期将会使用的技术栈: Gin、GORM、Postgres、gRPC、Docker

Gin快速入门

1. 安装Gin

首先,确保你已安装Go。然后使用以下命令安装Gin:

go get -u github.com/gin-gonic/gin

2. 创建一个简单的Web应用

在你的项目目录下,创建一个新的Go文件,例如main.go,并添加以下代码:

package mainimport ("github.com/gin-gonic/gin"
)func main() {// 创建一个默认的Gin路由r := gin.Default()// 设置一个简单的GET路由r.GET("/", func(c *gin.Context) {c.JSON(200, gin.H{"message": "hello gin",})})// 启动服务器,监听在8080端口r.Run(":8080")
}

3. 运行你的应用

在终端中,运行以下命令启动你的应用:

go run main.go

4. 测试API

打开你的浏览器或使用工具(如Postman或curl),访问 http://localhost:8080/。你应该会看到以下JSON响应:

请添加图片描述

Gin整合GORM

1. 安装GORM依赖

使用go get命令安装GORM和Postgres驱动的依赖:

go get gorm.io/gorm
go get gorm.io/driver/postgres

2. 初始化数据库连接并构建表模型

以用户表为例进行初始化:

// User模型
type User struct {ID    uint   `gorm:"primaryKey;autoIncrement"`Name  string `gorm:"not null"`Email string `gorm:"not null"`
}var db *gorm.DBfunc init() {// 数据库连接信息dsn := "host=localhost user=postgres password=123456 dbname=postgres port=5432 sslmode=disable TimeZone=Asia/Shanghai"var err error// 连接数据库db, err = gorm.Open(postgres.Open(dsn), &gorm.Config{})if err != nil {panic("failed to connect to database")}// 自动迁移(将在数据库中创建表)db.AutoMigrate(&User{})
}

3. 编写接口

实现对用户表的增删改查接口:

// 创建用户
r.POST("/users", func(c *gin.Context) {var user Userif err := c.ShouldBindJSON(&user); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}db.Create(&user)c.JSON(http.StatusCreated, user)
})// 获取所有用户
r.GET("/users", func(c *gin.Context) {var users []Userdb.Find(&users)c.JSON(http.StatusOK, users)
})// 根据ID获取用户
r.GET("/users/:id", func(c *gin.Context) {var user Userid := c.Param("id")if err := db.First(&user, id).Error; err != nil {c.JSON(http.StatusNotFound, gin.H{"error": "User not found"})return}c.JSON(http.StatusOK, user)
})// 更新用户
r.PUT("/users/:id", func(c *gin.Context) {var user Userid := c.Param("id")if err := db.First(&user, id).Error; err != nil {c.JSON(http.StatusNotFound, gin.H{"error": "User not found"})return}if err := c.ShouldBindJSON(&user); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}db.Save(&user)c.JSON(http.StatusOK, user)
})// 删除用户
r.DELETE("/users/:id", func(c *gin.Context) {id := c.Param("id")if err := db.Delete(&User{}, id).Error; err != nil {c.JSON(http.StatusNotFound, gin.H{"error": "User not found"})return}c.Status(http.StatusNoContent)
})

4. 测试

使用Postman或curl测试API:

  • 创建用户:

    curl -X POST http://localhost:8080/users -H "Content-Type: application/json" -d '{"name":"Alice", "email":"alice@example.com"}'
    
  • 获取所有用户:

    curl -X GET http://localhost:8080/users
    
  • 获取单个用户:

    curl -X GET http://localhost:8080/users/1
    
  • 更新用户:

    curl -X PUT http://localhost:8080/users/1 -H "Content-Type: application/json" -d '{"name":"Alice Updated", "email":"alice.updated@example.com"}'
    
  • 删除用户:

    curl -X DELETE http://localhost:8080/users/1
    

5. 测试结果

请添加图片描述

总结

通过本篇学习笔记,我们初步了解了gin的基本用法,包括如何安装、创建简单的Web应用以及整合gorm进行数据库操作。我们实现了一个用户管理的RESTful API,能够完成基本的增删改查功能。我们发现gin是一个非常简洁的一个框架,几行代码就可以构建一个Web应用,和express.js有着异曲同工之妙。接下来我会继续分享我的学习笔记,尽请期待。


http://www.ppmy.cn/devtools/131713.html

相关文章

【虚拟仿真】CEETRON SDK在船舶流体与结构仿真中的应用解读

随着全球造船业的快速发展和数字化转型,虚拟仿真技术在船舶设计、建造及维护中的应用变得愈加重要。造船业的复杂性和高成本使得工程师们依赖先进的仿真工具来优化设计、提升安全性并减少资源浪费。在此背景下,CEETRON SDK作为强大的可视化和仿真开发工具…

sql中判断一个字段是否包含一个数据的方法

目录 一、使用LIKE关键字 示例 应用场景 二、使用IN关键字 示例 应用场景 三、使用FIND_IN_SET函数(MySQL专用) 示例 应用场景 四、使用CHARINDEX或POSITION函数 示例 应用场景 五、使用正则表达式(部分数据库支持) …

滑动窗口习题篇(下)

滑动窗口习题篇(下) 1.水果成篮 题目描述: 你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。 你想要尽可能多地收集水果。然而,农场的主人设定了…

Java中的远程方法调用——RPC详解

1. 什么是RPC? RPC基础介绍 Java中的远程方法调用(Remote Procedure Call,RPC)是一种允许一个程序调用另一台计算机上方法的技术,就像在本地一样。RPC的核心思想是简化分布式计算,让我们可以跨网络调用远程…

智谱发布AI助理,帮人类敲响AGI的大门

人工智能之父John McCarthy曾说:“只要AI可以开始正常工作,就不会有人再把它当AI了。”如今,这一预言正在逐渐变为现实。 10月25日,智谱AI推出了自主智能体AutoGLM,能够模拟人类操作手机,执行各种任务。 …

Vuex的基本使用

文章目录 一、Vuex概述1.是什么2.使用场景3.优势4.注意二、如何构建vuex多组件共享数据环境1.创建项目2.创建三个组件3.源代码三、vuex 的使用 - 创建仓库1.安装 vuex2.新建 `store/index.js` 专门存放 vuex3.创建仓库 `store/index.js`4 在 main.js 中导入挂载到 Vue 实例上5.…

密码学简介

密码学是研究信息安全的一门学科,主要涉及数据加密、解密和验证。其基本概念和术语包括: 1、明文与密文明文:未加密的原始数据。密文:经过加密处理的数据,通常是不可读的。 2、加密与解密加密:将明文转换…

Windows 部署非安装版Redis

1.下载Redis https://github.com/microsoftarchive/redis/releases 选择下载zip包,如Redis-x64-3.0.504.zip,并解压 2.启动非安装版redis服务 进入到redis目录,打开cmd 执行命令 redis-server.exe redis.windows.conf 3.登录redis客户端…