前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >go语言中gin的用法

go语言中gin的用法

原创
作者头像
周辰晨
发布于 2024-03-18 01:05:13
发布于 2024-03-18 01:05:13
1810
举报

实现一段Http请求:

代码语言:go
AI代码解释
复制
package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

type User struct {
	Username string `json:"username"`
	Email    string `json:"email"`
}

func main() {
	router := gin.Default()

	router.GET("/user/:id", func(c *gin.Context) {
		// 取得URL中的参数
		id := c.Param("id")
		c.JSON(http.StatusOK, gin.H{"user_id": id})
	})

	router.POST("/user", func(c *gin.Context) {
		var user User
		if err := c.BindJSON(&user); err != nil {
			c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
			return
		}
		c.JSON(http.StatusOK, gin.H{"message": "User created successfully", "user": user})
	})

	router.PUT("/user/:id", func(c *gin.Context) {
		id := c.Param("id")
		var user User
		if err := c.BindJSON(&user); err != nil {
			c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
			return
		}
		c.JSON(http.StatusOK, gin.H{"message": "User with ID " + id + " updated successfully", "user": user})
	})

	router.DELETE("/user/:id", func(c *gin.Context) {
		id := c.Param("id")
		c.JSON(http.StatusOK, gin.H{"message": "User with ID " + id + " deleted successfully"})
	})

	router.Run(":8080")
}

在这个示例中,我们使用了gin框架来创建一个简单的HTTP服务。我们定义了四个路由

  1. GET /user/:id - 用于获取特定用户的信息。在这个示例中,我们通过c.Param("id")来获取URL中的参数,并返回对应的用户ID。
  2. POST /user - 用于创建新用户。我们通过c.BindJSON(&user)来从请求中获取JSON格式的用户数据,并返回创建成功的消息以及用户信息。
  3. PUT /user/:id - 用于更新特定用户的信息。类似于GET请求,我们获取URL中的参数和JSON格式的用户数据,并返回更新成功的消息以及用户信息。
  4. DELETE /user/:id - 用于删除特定用户。我们同样获取URL中的参数,并返回删除成功的消息。

调用方式:

  1. 在终端中运行go run main.go编译并启动HTTP服务。
  2. 使用任何HTTP客户端(如Postman、curl等)来发送GET、POST、PUT和DELETE请求,以测试我们定义的四个路由。

在Gin框架中,BindJSON函数用于将请求的JSON数据绑定到结构体变量上。其函数签名为:

代码语言:go
AI代码解释
复制
func (c *Context) BindJSON(obj interface{}) error

参数obj是一个接口类型,表示要绑定的目标结构体变量。BindJSON函数会尝试从请求的body中读取JSON数据,并将其解析到obj所代表的结构体变量中。

如果解析成功,BindJSON函数会返回nil,否则会返回一个非nil的错误。在错误的情况下,应该处理该错误并返回相应的错误信息给客户端。

示例用法如下:

代码语言:go
AI代码解释
复制
type User struct {
    Username string `json:"username"`
    Email    string `json:"email"`
}

func createUserHandler(c *gin.Context) {
    var user User
    if err := c.BindJSON(&user); err != nil {
        // 处理错误并返回错误信息给客户端
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }
    // 解析成功,可以使用user结构体变量
    // ...
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
6.Gin 路由详解 - GET POST 请求以及参数获取示例
为了能够更方便的获取请求相关参数,提高开发效率,我们可以基于请求的 Content-Type 识别请求数据类型并利用反射机制自动提取请求中 QueryString、form 表单、JSON、XML 等参数到结构体中。
Devops海洋的渔夫
2023/11/20
2.1K0
6.Gin 路由详解 - GET POST 请求以及参数获取示例
Gin-Web-Framework官方指南中文(下篇)
ShouldBind,ShouldBindJSON,ShouldBindXML,ShouldBindQuery,ShouldBindYAML
小诚信驿站
2019/10/31
2.4K0
Gin-Web-Framework官方指南中文(下篇)
gin学习——邮箱发送验证码注册用户
qq邮箱-设置-账户 安装 go get -u github.com/jordan-wright/email go get -u github.com/garyburd/redigo/redis dao/user_dao.go func SendEmailValidate(em []string) (string,error) { e:=email.NewEmail() e.From = fmt.Sprintf("发件人笔名 <发件人邮箱>") e.To = em // 生成
传说之下的花儿
2023/04/16
1.1K0
gin学习——邮箱发送验证码注册用户
go : gin 模型绑定与验证
将请求体绑定到类型中,请使用模型绑定。我们目前支持JSON、XML、YAML和标准表单值(foo=bar&boo=baz)的绑定
IT工作者
2022/07/23
2940
Go 小清单
这个项目超级简单,前端代码是已经做好的,直接去大佬仓库clone就行,只不过教程比较久远了,所以代码需要一些调整。
f1sh
2024/07/30
990
初学gin
已经放弃goframe框架,对待新手不是很友好,社区圈子也很小。因为我自身的话是没有go语言的编程基础的,所以导致了我看不太懂那个框架,不过看很多人都说goframe封装的很好,有人吐槽有人夸,开源的框架嘛,这些都是在所难免的。
是小张啊喂
2021/08/09
7590
Gin简单明了的教程---上
注意: 如果直接从github拉取失败,可以尝试更换代理,重新设置GOPROXY为国内代理源,然后再次尝试
大忽悠爱学习
2022/08/23
2.1K0
Gin简单明了的教程---上
Go Gin框架请求自动验证和数据绑定,看完这篇就会用了
之前做项目基本上公司是用 gRPC 和 echo 这两个框架的组合,后来 Gin 框架在Go圈越来越流行,陆续我在公司接触到的项目也开始有人用 Gin 框架开发了。
KevinYan
2023/01/03
3.2K0
Go Gin框架请求自动验证和数据绑定,看完这篇就会用了
Go: Gin框架中的binding验证器使用指南
在Gin框架中,数据绑定和验证是开发API时不可或缺的部分。Gin提供了强大的binding功能,允许我们将请求的数据绑定到结构体,并通过标签进行数据验证。本文将详细讲解如何在Gin中使用binding验证器进行数据验证,并提供代码示例帮助理解。
运维开发王义杰
2024/05/31
1.2K0
Go: Gin框架中的binding验证器使用指南
SRE后端接口开发篇
截止昨天,我们可以使用gin框架创建一个简单的web项目,实现通过访问根路径实现页面展示hello world消息。那么像昨天创建的简单项目肯定不能满足我们的调用k8s集群信息功能页面的设计需求,所以今天再接着来开发。
希里安
2023/10/30
3930
SRE后端接口开发篇
gin操作MySQL和Redis
go这些基础的东西,看起来很舒服,最起码对于写习惯java的人来讲,go真的很舒服,所以近一段时间可能一直连更,gin并没有直接封装操作MySQL的工具类,所以还是使用开源的工具
是小张啊喂
2021/08/10
2.8K0
你会高效写http服务器吗?Gin实战演练
胖sir开始捣鼓http服务器,在寻求一种高效的解决方式且高性能的解决方式...
阿兵云原生
2023/02/16
2.1K0
Go语言进行Web开发(Gin)、配置文件
在 Gin 框架中,你可以使用 ShouldBindJSON() 方法来获取 POST 请求中的 JSON 参数。
码客说
2024/03/29
1960
Go语言WEB框架之Gin
文档:https://gin-gonic.com/zh-cn/docs/quickstart/
码客说
2022/10/05
1.2K0
Gin 如何编写一个接收文件的 HTTP 接口
以前遇到编程类的问题,第一时间想到的是 Google,而现在我会问 ChatGPT。
恋喵大鲤鱼
2023/02/23
1.4K0
01 . Go框架之Gin框架从入门到熟悉(路由和上传文件)
路由方法有GET, POST, PUT, PATCH, DELETE 和 OPTIONS,还有Any,可匹配以上任意类型的请求
iginkgo18
2020/10/30
1.5K0
Gin 路由注册与请求参数获取
RESTful(Representational State Transfer)代表的是一种基于HTTP协议设计的软件架构风格,它通常用于构建Web服务,是Representational State Transfer的简称,中文翻译为“表征状态转移”或“表现层状态转化”。RESTful架构的设计理念是将资源表示为URI(统一资源标识符),通过HTTP协议的GET、POST、PUT、DELETE等方法对资源进行操作。以下是RESTful架构的一些关键特点:
贾维斯Echo
2024/01/05
3970
Gin 路由注册与请求参数获取
使用 Dify、Meilisearch、零一万物模型实现最简单的 RAG 应用(三):AI 电影推荐
这篇文章,我们继续聊聊,如何折腾 AI 应用,把不 AI 的东西,“AI 起来”。在不折腾复杂的检索系统的前提下,快速完成轻量的 RAG 实践。
soulteary
2024/05/20
8300
Gin入门教程:从零开始学习Go语言Web框架
在Go语言的Web开发领域,Gin框架无疑是一个备受关注的轻量级框架。它具有快速、高效、易用等特点,非常适合用于构建Web应用程序。本篇博客将带领大家从零开始学习Gin框架,包括安装、基本用法和常用功能等内容。 Gin 是一个用 Go 语言编写的 Web 框架,它提供了快速构建高性能 Web 应用程序的工具和框架。下面是 Gin 框架的一些特点和功能:
用户6297767
2023/11/21
11.4K1
boss: 这小子还不会使用validator库进行数据校验,开了~~~
哈喽,大家好,我是asong。这是我的第十篇原创文章。这周在公司做项目,在做API部分开发时,需要对请求参数的校验,防止用户的恶意请求。例如日期格式,用户年龄,性别等必须是正常的值,不能随意设置。最开始在做这一部分的时候,我采用老方法,自己编写参数检验方法,统一进行参数验证。后来在同事CR的时候,说GIN有更好的参数检验方法,gin框架使用github.com/go-playground/validator进行参数校验,我们只需要在定义结构体时使用binding或validatetag标识相关校验规则,就可以进行参数校验了,很方便。相信也有很多小伙伴不知道这个功能,今天就来介绍一下这部分。
Golang梦工厂
2022/07/07
7440
相关推荐
6.Gin 路由详解 - GET POST 请求以及参数获取示例
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文