这是我参与[第五届青训营]的第十天。
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
//handle方法
func Pong(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"name": "ice_moss",
"age": 18,
"school": "bili大学",
})
}
func main() {
//初始化一个gin的server对象
//Default实例化对象具有日志和返回状态功能
r := gin.Default()
//注册路由,并编写处理方法
r.GET("/ping", Pong)
//监听端口:默认端口listen and serve on 0.0.0.0:8080
r.Run(":8083")
}
- gin 的 GET 和 POST 方法
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func GinGet(c *gin.Context) {
c.JSON(http.StatusOK, map[string]interface{}{
"name": "ice_moss",
})
}
func GinPost(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"token": "您好",
})
}
func main() {
router := gin.Default()
router.GET("/GinGet", GinGet)
router.POST("/GinPost", GinPost)
router.Run(":8083")
}
路由分组
//路由分组
func main() {
router := gin.Default()
//未使用路由分组
//获取商品列表
//router.GET("/ProductList", ProductLists)
//获取某一个具体商品信息
//router.GET("/ProductList/1", Prouduct1)
//添加商品
//router.POST("ProductList/Add", CreateProduct)
//路由分组
ProductList := router.Group("/Produc")
{
ProductList.GET("/list", ProductLists)
ProductList.GET("/1", Prouduct1)
ProductList.POST("/Add", CreateProduct)
}
router.Run(":8083")
}
URL 值的提取
很多时候我们需要对 URL 中数据的提取,或者动态的 URL,我们不可能将 URL 写固定。
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func ProductLists(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"candy": [5]string{"6", "9", "500"},
"cookie": [3]string{"9", "6", "200"},
})
}
func Prouduct1(c *gin.Context) {
//获取url中的参数
id := c.Param("id")
action := c.Param("action")
c.JSON(http.StatusOK, gin.H{
"candy": [5]string{"9", "6", "500"},
"id": id,
"action": action,
})
}
func CreateProduct(c *gin.Context) {}
//url取值
func main() {
router := gin.Default()
//路由分组
ProductList := router.Group("/Product")
{
ProductList.GET("", ProductLists)
//使用"/:id"动态匹配参数
ProductList.GET("/:id/:action", Prouduct1)
ProductList.POST("", CreateProduct)
}
router.Run(":8083")
}
构体体声明并做约束
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
//结构体声明,并做一些约束
type Porsen struct {
ID int `uri:"id" binding:"required"` //uri指在client中的名字为id,binding:"required指必填
Name string `uri:"name" binding:"required"` //同理
}
//url参数获取
func main() {
router := gin.Default()
router.GET("/:name/:id", func(c *gin.Context) {
//使用porsen对数据进行解组
var porsen Porsen
if err := c.ShouldBindUri(&porsen); err != nil {
c.Status(404)
return
}
c.JSON(http.StatusOK, gin.H{
"name": porsen.Name,
"id": porsen.ID,
})
})
router.Run(":8083")
}