摘要
返回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")
}
再次访问: