Go语言之Gin框架,返回后台json格式信息到前端

摘要


返回JSON格式信息到前端,在Gin框架中可使用两种方式

第一种方法,使用map类型返回

main.go

package main

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

func main() {
	r :=gin.Default()
	r.GET("/json", func(c *gin.Context) {
		//方法一:使用map
		data := map[string]interface{}{
			"name": "Go语言",
			"message": "Gin框架",
		}

		c.JSON(http.StatusOK,data)
	})
	r.Run(":9090")
	
}

在Gin框架中,可使用gin.H实现,打开详细解析后,就可以看到就是一个map类型的接口

在这里插入图片描述

所以使用Gin框架代码修改
main.go

package main

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

func main() {
	r :=gin.Default()
	r.GET("/json", func(c *gin.Context) {
		//方法一:使用map
		//data := map[string]interface{}{
		//	"name": "Go语言",
		//	"message": "Gin框架",
		//}
		data := gin.H{"name":"Go语言","message":"Gin框架"}
		c.JSON(http.StatusOK,data)
	})
	r.Run(":9090")
	
}

修改一下,严谨美观的写法:

package main

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

func main() {
	r := gin.Default()
	r.GET("/json", func(c *gin.Context) {
		//方法一:使用map
		//data := map[string]interface{}{
		//	"name": "Go语言",
		//	"message": "Gin框架",
		//}
		//data := gin.H{"name":"Go语言","message":"Gin框架"}
		c.JSON(http.StatusOK, gin.H{"name": "Go语言", "message": "Gin框架"})
	})
	r.Run(":9090")

}

运行程序

go run main.go

打开浏览器访问http://ip:9090/json

在这里插入图片描述

第二种方法,使用结构体方式,这种方式用途最多,最常用

main.go

package main

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

func main() {
	r := gin.Default()
	r.GET("/json1", func(c *gin.Context) {
		//方法一:使用map
		//data := map[string]interface{}{
		//	"name": "Go语言",
		//	"message": "Gin框架",
		//}
		//data := gin.H{"name":"Go语言","message":"Gin框架"}
		//第一种方法使用内置gin.H  map类型
		c.JSON(http.StatusOK, gin.H{"name": "Go语言", "message": "Gin框架"})
	})
	
	//第二种方法使用结构体
	type msg struct {
		Name string
		Message string
	}
	r.GET("/json2", func(c *gin.Context) {
		data :=msg{
			Name:    "Go语言",
			Message: "Gin框架",
		}
		c.JSON(http.StatusOK,data)
	})
	r.Run(":9090")

}

运行程序

go run main.go

打开浏览器

在这里插入图片描述

这种方式有一个问题,如果把结构体内的字段首字母小写

在这里插入图片描述

c.JSON是访问不到的,涉及到序列化问题

在这里插入图片描述

那要是非要用小写怎么办呢
可以使用tag方式,添加"json:"name""
main.go

package main

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

func main() {
	r := gin.Default()
	r.GET("/json1", func(c *gin.Context) {
		//方法一:使用map
		//data := map[string]interface{}{
		//	"name": "Go语言",
		//	"message": "Gin框架",
		//}
		//data := gin.H{"name":"Go语言","message":"Gin框架"}
		//第一种方法使用内置gin.H  map类型
		c.JSON(http.StatusOK, gin.H{"name": "Go语言", "message": "Gin框架"})
	})
	type msg struct {
		Name string  `json:"name"`
		Message string
	}
	r.GET("/json2", func(c *gin.Context) {
		data :=msg{
			Name:    "Go语言",
			Message: "Gin框架",
		}
		c.JSON(http.StatusOK,data)
	})
	r.Run(":9090")

}

再次访问:

在这里插入图片描述

相关文章

什么是Go的接口? 接口可以说是一种类型,可以粗略的理解为他...
1、Golang指针 在介绍Golang指针隐式间接引用前,先简单说下...
1、概述 1.1 Protocol buffers定义 Protocol buffe...
判断文件是否存在,需要用到"os"包中的两个函数: os.Stat(...
1、编译环境 OS :Loongnix-Server Linux release 8.3 CPU指...
1、概述 Golang是一种强类型语言,虽然在代码中经常看到i:=1...