Go语言学习--Gin框架之响应

Go语言学习--Gin框架之响应

文章目录

  • Go语言学习--Gin框架之响应
    • [1. 响应类型为string](#1. 响应类型为string)
    • [2. 响应类型为JSON](#2. 响应类型为JSON)
      • [2.1 不带json的tag](#2.1 不带json的tag)
      • [2.2 带json的tag](#2.2 带json的tag)
      • [2.3 不需要使用的tag](#2.3 不需要使用的tag)
      • [2.4 响应map](#2.4 响应map)
      • [2.5 直接响应json](#2.5 直接响应json)
    • [3. 响应类型为xml](#3. 响应类型为xml)
    • [4. 响应类型为yaml](#4. 响应类型为yaml)
    • [5. 代码](#5. 代码)

1. 响应类型为string

  • stringResponse.go
shell 复制代码
package main

import (
	"net/http"

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

// 当客户端以GET方法请求/string路径时, 执行以下函数
func StringResponse(c *gin.Context) {
	c.String(http.StatusOK, "This is string response")
}

func main() {
	// 创建默认路由引擎
	r := gin.Default()

	// GET:请求方式;/string:请求的路径
	// 当客户端以GET方法请求/string路径时,会执行StringResponse函数
	r.GET("/string", StringResponse)

	// 启动HTTP服务,监听本机的8080端口
	r.Run(":8080")
}
  • 运行程序
  • 浏览器访问
shell 复制代码
# 在浏览器的地址栏输入 http://127.0.0.1:8080/string

# 浏览器的响应结果
This is string response
  • 监听结果
shell 复制代码
[GIN] 2024/03/21 - 16:38:34 | 200 |            0s |       127.0.0.1 | GET      "/string"

2. 响应类型为JSON

2.1 不带json的tag

  • jsonResponse.go
shell 复制代码
package main

import (
	"net/http"

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

// 当客户端以GET方法请求/json路径时, 执行以下函数
func JsonResponse(c *gin.Context) {
	type UserInfo struct {
		UserName string 
		Age      int   
	}
	user := UserInfo{UserName: "json", Age: 20}
	c.JSON(http.StatusOK, user)
}

func main() {
	// 创建默认路由引擎
	r := gin.Default()

	// GET:请求方式;/json:请求的路径
	// 当客户端以GET方法请求/json路径时,会执行JsonResponse函数
	r.GET("/json", JsonResponse)

	// 启动HTTP服务,监听本机的8080端口
	r.Run(":8080")
}
  • 运行程序
  • 浏览器访问
shell 复制代码
# 在浏览器的地址栏输入 http://127.0.0.1:8080/json

# 浏览器的响应结果
{"UserName":"json","Age":20}
  • 监听结果
shell 复制代码
[GIN] 2024/03/21 - 16:44:02 | 200 |       676.3µs |       127.0.0.1 | GET      "/json"

2.2 带json的tag

  • jsonResponse.go
shell 复制代码
package main

import (
	"net/http"

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

// 当客户端以GET方法请求/json路径时, 执行以下函数
func JsonResponse(c *gin.Context) {
	type UserInfo struct {
		UserName string `json:"user_name"`
		Age      int    `json:"age"`
	}
	user := UserInfo{UserName: "json", Age: 20}
	c.JSON(http.StatusOK, user)
}

func main() {
	// 创建默认路由引擎
	r := gin.Default()

	// GET:请求方式;/json:请求的路径
	// 当客户端以GET方法请求/json路径时,会执行JsonResponse函数
	r.GET("/json", JsonResponse)

	// 启动HTTP服务,监听本机的8080端口
	r.Run(":8080")
}
  • 运行程序
  • 浏览器访问
shell 复制代码
# 在浏览器的地址栏输入 http://127.0.0.1:8080/json

# 浏览器的响应结果
{"user_name":"json","age":20}
  • 监听结果
shell 复制代码
[GIN] 2024/03/21 - 16:48:58 | 200 |      1.0047ms |       127.0.0.1 | GET      "/json"

2.3 不需要使用的tag

  • jsonResponse.go
shell 复制代码
package main

import (
	"net/http"

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

// 当客户端以GET方法请求/json路径时, 执行以下函数
func JsonResponse(c *gin.Context) {
	type UserInfo struct {
		UserName string `json:"user_name"`
		Age      int    `json:"age"`
		// 当有些内容不适合暴露是,可以使用"-"来忽略转化成json格式
		Password string `json:"-"`
	}
	user := UserInfo{UserName: "json", Age: 20}
	c.JSON(http.StatusOK, user)
}

func main() {
	// 创建默认路由引擎
	r := gin.Default()

	// GET:请求方式;/json:请求的路径
	// 当客户端以GET方法请求/json路径时,会执行JsonResponse函数
	r.GET("/json", JsonResponse)

	// 启动HTTP服务,监听本机的8080端口
	r.Run(":8080")
}
  • 运行程序
  • 浏览器访问
shell 复制代码
# 在浏览器的地址栏输入 http://127.0.0.1:8080/json

# 浏览器的响应结果
{"user_name":"json","age":20}
  • 监听结果
shell 复制代码
[GIN] 2024/03/21 - 16:54:03 | 200 |            0s |       127.0.0.1 | GET      "/json"

2.4 响应map

  • jsonResponse.go
shell 复制代码
package main

import (
	"net/http"

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

// 当客户端以GET方法请求/json路径时, 执行以下函数
func JsonResponse(c *gin.Context) {
	c.JSON(http.StatusOK, map[string]string{"userName": "json", "age": "10"})
}

func main() {
	// 创建默认路由引擎
	r := gin.Default()

	// GET:请求方式;/json:请求的路径
	// 当客户端以GET方法请求/json路径时,会执行JsonResponse函数
	r.GET("/json", JsonResponse)

	// 启动HTTP服务,监听本机的8080端口
	r.Run(":8080")
}
  • 运行程序
  • 浏览器访问
shell 复制代码
# 在浏览器的地址栏输入 http://127.0.0.1:8080/json

# 浏览器的响应结果
{"age":"10","userName":"json"}
  • 监听结果
shell 复制代码
[GIN] 2024/03/21 - 17:01:41 | 200 |            0s |       127.0.0.1 | GET      "/json"

2.5 直接响应json

  • jsonResponse.go
shell 复制代码
package main

import (
	"net/http"

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

// 当客户端以GET方法请求/json路径时, 执行以下函数
func JsonResponse(c *gin.Context) {
	c.JSON(http.StatusOK, gin.H{
		"userName": "json",
		"age":      "10",
	})
}

func main() {
	// 创建默认路由引擎
	r := gin.Default()

	// GET:请求方式;/json:请求的路径
	// 当客户端以GET方法请求/json路径时,会执行JsonResponse函数
	r.GET("/json", JsonResponse)

	// 启动HTTP服务,监听本机的8080端口
	r.Run(":8080")
}
  • 运行程序
  • 浏览器访问
shell 复制代码
# 在浏览器的地址栏输入 http://127.0.0.1:8080/json

# 浏览器的响应结果
{"age":"10","userName":"json"}
  • 监听结果
shell 复制代码
[GIN] 2024/03/21 - 17:05:22 | 200 |            0s |       127.0.0.1 | GET      "/json"

3. 响应类型为xml

  • xmlResponse.go
shell 复制代码
package main

import (
	"net/http"

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

// 当客户端以GET方法请求/xml路径时, 执行以下函数
func XmlResponse(c *gin.Context) {
	c.XML(http.StatusOK, gin.H{
		"UserName": "张三",
		"Age":      20,
		"Sex":      "男",
	})
}

func main() {
	// 创建默认路由引擎
	r := gin.Default()

	// GET:请求方式;/xml:请求的路径
	// 当客户端以GET方法请求/xml路径时,会执行XmlResponse函数
	r.GET("/xml", XmlResponse)

	// 启动HTTP服务,监听本机的8080端口
	r.Run(":8080")
}
  • 运行程序
  • 浏览器访问
shell 复制代码
# 在浏览器的地址栏输入 http://127.0.0.1:8080/json

# 浏览器的响应结果
<map>
  <UserName>张三</UserName>
  <Age>20</Age>
  <Sex>男</Sex>
</map>
  • 监听结果
shell 复制代码
[GIN] 2024/03/21 - 17:14:14 | 200 |      1.0007ms |       127.0.0.1 | GET      "/xml"

4. 响应类型为yaml

  • xmlResponse.go
shell 复制代码
package main

import (
	"net/http"

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

// 当客户端以GET方法请求/xml路径时, 执行以下函数
func XmlResponse(c *gin.Context) {
	c.XML(http.StatusOK, gin.H{
		"UserName": "张三",
		"Age":      20,
		"Sex":      "男",
	})
}

func main() {
	// 创建默认路由引擎
	r := gin.Default()

	// GET:请求方式;/xml:请求的路径
	// 当客户端以GET方法请求/xml路径时,会执行XmlResponse函数
	r.GET("/xml", XmlResponse)

	// 启动HTTP服务,监听本机的8080端口
	r.Run(":8080")
}
  • 运行程序
  • 浏览器访问
shell 复制代码
# 在浏览器的地址栏输入 http://127.0.0.1:8080/json

# 浏览器的响应结果
# 浏览器会执行下载操作,文件内容如下:
Age: 20
Sex: 男
UserName: 张三
  • 监听结果
shell 复制代码
[GIN] 2024/03/21 - 17:23:54 | 200 |            0s |       127.0.0.1 | GET      "/yaml"

5. 代码

  • response.go
shell 复制代码
package main

import (
	"net/http"

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

// 当客户端以GET方法请求/string路径时, 执行以下函数
func StringResponse(c *gin.Context) {
	c.String(http.StatusOK, "This is string response")
}

// 当客户端以GET方法请求/json路径时, 执行以下函数
func JsonResponse(c *gin.Context) {
	//type UserInfo struct {
	//	UserName string `json:"user_name"`
	//	Age      int    `json:"age"`
	//	Password string `json:"-"`
	//}
	//user := UserInfo{UserName: "json", Age: 20, Password: "123456"}
	//c.JSON(http.StatusOK, user)

	//c.JSON(http.StatusOK, map[string]string{"userName": "json", "age": "10"})

	c.JSON(http.StatusOK, gin.H{
		"userName": "json",
		"age":      "10",
	})
}

// 当客户端以GET方法请求/xml路径时, 执行以下函数
func XmlResponse(c *gin.Context) {
	c.XML(http.StatusOK, gin.H{
		"UserName": "张三",
		"Age":      20,
		"Sex":      "男",
	})
}

// 当客户端以GET方法请求/yaml路径时, 执行以下函数
func YamlResponse(c *gin.Context) {
	c.YAML(http.StatusOK, gin.H{
		"UserName": "张三",
		"Age":      20,
		"Sex":      "男",
	})
}

func main() {
	// 创建默认路由引擎
	r := gin.Default()

	// GET:请求方式;/string:请求的路径
	// 当客户端以GET方法请求/string路径时,会执行StringResponse函数
	r.GET("/string", StringResponse)

	// GET:请求方式;/json:请求的路径
	// 当客户端以GET方法请求/json路径时,会执行JsonResponse函数
	r.GET("/json", JsonResponse)

	// GET:请求方式;/xml:请求的路径
	// 当客户端以GET方法请求/xml路径时,会执行XmlResponse函数
	r.GET("/xml", XmlResponse)

	// GET:请求方式;/yaml:请求的路径
	// 当客户端以GET方法请求/yaml路径时,会执行YamlResponse函数
	r.GET("/yaml", YamlResponse)

	// 启动HTTP服务,监听本机的8080端口
	r.Run(":8080")
}
相关推荐
研梦非凡几秒前
ICCV 2025|从粗到细:用于高效3D高斯溅射的可学习离散小波变换
人工智能·深度学习·学习·3d
limengshi1383921 小时前
机器学习面试:请介绍几种常用的学习率衰减方式
人工智能·学习·机器学习
知识分享小能手1 小时前
React学习教程,从入门到精通,React 组件核心语法知识点详解(类组件体系)(19)
前端·javascript·vue.js·学习·react.js·react·anti-design-vue
周周记笔记2 小时前
学习笔记:第一个Python程序
笔记·学习
优雅鹅3 小时前
ARM、AArch64、amd64、x86_64、x86有什么区别?
arm开发·学习
..过云雨3 小时前
05.【Linux系统编程】进程(冯诺依曼体系结构、进程概念、进程状态(注意僵尸和孤儿)、进程优先级、进程切换和调度)
linux·笔记·学习
咸甜适中3 小时前
rust语言 (1.88) egui (0.32.2) 学习笔记(逐行注释)(二十八)使用图片控件显示图片
笔记·学习·rust·egui
o0o_-_4 小时前
【go/gopls/mcp】官方gopls内置mcp server使用
开发语言·后端·golang
兔子不吃草~6 小时前
Transformer学习记录与CNN思考
学习·cnn·transformer
与己斗其乐无穷6 小时前
C++学习记录(8)list
学习