下载和安装gin模块
go get -u github.com/gin-gonic/gin
简单接口demo
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default() // 创建一个默认的路由引擎
r.GET("/ping", func(c *gin.Context) {
// 路由
c.JSON(200, gin.H{
// 返回json数据
"message": "hello golang",
})
})
r.Run() // 监听并在 0.0.0.0:8080 上启动服务
//r.Run(":8081") // 自定义端口
}
浏览器访问:http://127.0.0.1:8080/ping
返回JSON格式数据
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
// gin.H 是map[string]interface{}的缩写
r.GET("/someJSON", func(c *gin.Context) {
// 方式一:自己拼接JSON
c.JSON(http.StatusOK, gin.H{
"message": "Hello world!"})
})
r.GET("/moreJSON", func(c *gin.Context) {
// 方法二:使用结构体
var msg struct {
Name string `json:"user"`
Message string
Age int
}
msg.Name = "小王子"
msg.Message = "Hello world!"
msg.Age = 18
c.JSON(http.StatusOK, msg)
})
r.Run(":8080")
}
浏览器访问:http://localhost:8080/someJSON
,http://localhost:8080/moreJSON
获取参数
推荐一篇博主写的文章,很全,获取请求参数和绑定参数示例都是全的
获取querystring类型参数
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.GET("/user/search", func(c *gin.Context) {
username := c.DefaultQuery("username", "小王子") // 没有username对应参数时默认小王子
//username := c.Query("username")
address := c.Query("address") // 获取address参数
//输出json结果给调用方
c.JSON(http.StatusOK, gin.H{
"message": "ok",
"username": username,
"address": address,
})
})
r.Run(":8080")
}
浏览器访问:http://localhost:8080/user/search?username=萧寂&address=河南省
获取form表单参数
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.POST("/user/search", func(c *gin.Context) {
// DefaultPostForm取不到值时会返回指定的默认值
//username := c.DefaultPostForm("username", "小王子")
username := c.PostForm("username")
address := c.PostForm("address")
//输出json结果给调用方
c.JSON(http.StatusOK, gin.H{
"message": "ok",
"username": username,
"address": address,
})
})
r.Run(":8080")
}
使用apiFox新建快捷请求,地址栏输入:http://localhost:8080/user/search
,请求方式选择post
,请求参数选择Body
里面的form-data
或者x-www-form-urlencoded
,新增username
字段,值为萧寂
,address
字段,值为河南省
,点击发送请求即可
获取JSON参数
package main
import (
"encoding/json"
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.POST("/json", func(c *gin.Context) {
// 注意:下面为了举例子方便,暂时忽略了错误处理
b, _ := c.GetRawData() // 从c.Request.Body读取请求数据
// 定义map或结构体
var m map[string]interface{
}
// 反序列化
_ = json.Unmarshal(b, &m)
c.JSON(http.StatusOK, m)
})
r.Run(":8080")
}
使用apiFox新建快捷请求,地址栏输入:http://localhost:8080/json
,请求方式选择post
,请求参数选择Body
里面的json
或者xml
或者raw
,内容如下,然后点击发请求
{
"username":"萧寂",
"address":"河南省"
}
获取path参数
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.GET("/user/search/:username/:address", func(c *gin.Context) {
username := c.Param("username")
address := c.Param("address")
//输出json结果给调用方
c.JSON(http.StatusOK, gin.H{
"message": "ok",
"username": username,
"address": address,
})
})
r.Run(":8080")
}
浏览器访问:http://localhost:8080/user/search/萧寂/河南省
获取请求头参数和设置响应头参数
package main
import (
"fmt"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.POST("/headers", func(c *gin.Context) {
//获取请求头参数 不区分大小写
str := c.GetHeader("hahaha")
fmt.Println("获取请求头参数:", str)
//设置响应头
c.Header("token", "6666666666abc")
c.JSON(200, gin.H{
"msg": "成功"})
})
// 启动服务器
r.Run(":8080")
}
使用apiFox新建快捷请求,地址栏输入:http://localhost:8080/headers
,请求方式选择post
,请求参数选择headers
里面的新增参数hahaha
内容数字或者英文任意
,然后点击发请求
然后查看响应头参数和控制台打印的请求头参数
绑定参数
为了能够更方便的获取请求相关参数,提高开发效率,我们可以基于请求的Content-Type识别请求数据类型并利用反射机制自动提取请求中QueryString、form表单、JSON、XML等参数到结构体中。 下面的示例代码演示了.ShouldBind()强大的功能,它能够基于请求自动提取JSON、form表单和QueryString类型的数据,并把值绑定到指定的结构体对象。
推荐一篇博主写的文章,很全,获取请求参数和绑定参数示例都是全的
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
// Binding from JSON
type Login struct {
User string `form:"user" json:"user" binding:"required"`
Password string `form:"password" json:"password" binding:"required"`
}
func main() {
router :=