Go语言Gin处理响应方式详解

前言

本文介绍Gin框架处理响应数据,支持以字符串、json、xml、文件等格式响应请求。

gin.Context 上下文对象支持多种返回处理结果,下面分别介绍不同的响应方式。

1.以字符串方式响应请求

通过String函数返回字符串。

函数定义:

func (c *Context) String(code int, format string, values …interface{})

r.GET("/", func(c *gin.Context) {
        c.String(http.StatusOK, "hello world")
})

2.以json格式响应请求

开发api接口的时候常用的格式就是json,下面是返回json格式数据的例子。

// localhost:8080/user
type User struct {
        Name string `json:"name"`
        Age  int    `json:"age"`
}
r.GET("/user", func(c *gin.Context) {
        u := &User{
                Name: "lucifer",
                Age:  18,
        }
        c.JSON(http.StatusOK, u)
})

3.以xml格式响应请求

开发api接口的时候,也有使用xml格式的响应,下面是返回xml格式数据的例子。

// localhost:8080/student
type Student struct {
        Name string `xml:"name"`
        Age  int    `xml:"age"`
}
r.GET("/student", func(c *gin.Context) {
        s := &Student{
                Name: "lucifer",
                Age:  19,
        }
        c.XML(http.StatusOK, s)
})

4.以文件格式响应请求

下面介绍说明,gin框架如何直接返回一个文件,可以用来做文件下载。

// 4.1 直接返回
r.GET("/file", func(c *gin.Context) {
        c.File("./readme.txt")
})
// 4.2 返回文件,指定下载文件名
r.GET("/filename", func(c *gin.Context) {
        c.FileAttachment("./readme.txt", "change_file_name.txt")
})

5.示例

package main

import (
        "github.com/gin-gonic/gin"
        "net/http"
)

/*
Gin 处理请求参数
*/
func main() {
        // 一、实例化服务
        r := gin.Default()

        // 二、路由

        // 1.直接返回string
        // localhost:8080
        r.GET("/", func(c *gin.Context) {
                c.String(http.StatusOK, "hello world")
        })

        // 2.返回json 数据
        // localhost:8080/user
        type User struct {
                Name string `json:"name"`
                Age  int    `json:"age"`
        }
        r.GET("/user", func(c *gin.Context) {
                u := &User{
                        Name: "lucifer",
                        Age:  18,
                }
                c.JSON(http.StatusOK, u)
        })

        // 3.返回xml数据
        // localhost:8080/student
        type Student struct {
                Name string `xml:"name"`
                Age  int    `xml:"age"`
        }
        r.GET("/student", func(c *gin.Context) {
                s := &Student{
                        Name: "lucifer",
                        Age:  19,
                }
                c.XML(http.StatusOK, s)
        })
        
        // 4.返回文件
        // 4.1 直接返回
        r.GET("/file", func(c *gin.Context) {
                c.File("./readme.txt")
        })
        // 4.2 返回文件,指定下载文件名
        r.GET("/filename", func(c *gin.Context) {
                c.FileAttachment("./readme.txt", "change_file_name.txt")
        })

        // 三、启动服务
        r.Run(":8080")
}

总结

原文地址:https://blog.csdn.net/jeikerxiao/article/details/128420278