目錄
>開啟一個Gin服務
>啟動Gin服務
>HTML頁面的渲染
>JSON
>Restful
>接收前端傳遞過來的參數
>前端給後端傳遞 json
>form表單
>重定向
>404 NoRoute
>路由組
Go的web架構給我帶來的感覺就是簡潔,簡潔,太簡潔了,寫起來非常輕松,真的很舒服,很爽快,很利落。
>開啟一個Gin服務
g := gin.Default()
>啟動Gin服務
err := g.Run(":8080")
if err != nil {
}
>HTML頁面的渲染
- 加載靜态頁面
g.LoadHTMLGlob("templates/*")
c.HTML,第一個傳入狀态碼,一般是200,重定向是301,第二個是傳入templates下的html檔案,第三個是寫gin.H{},括号中傳入的key,就可以在html頁面中通過使用key把key的value值渲染出來。
db := gorm.DbRun()
user := make([]*gorm.Student, 0)
db.Where("Age = ?", 18).Find(&user)
g.GET("/index", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.html", gin.H{
"msg": user[0].Name,
})
})
>JSON
g.GET("/gin", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "Gin"})
})
>Restful
Restful,通過用一個路由實作多種請求方式,用postman來測試或者apipost7
g.GET("/restful", func(c *gin.Context) {
return
})
g.POST("/restful", func(c *gin.Context) {
return
})
g.DELETE("/restful", func(c *gin.Context) {
return
})
g.PUT("/restful", func(c *gin.Context) {
return
})
>接收前端傳遞過來的參數
- user?username=XXX&password=XXX
g.GET("/user", func(c *gin.Context) {
username := c.Query("username")
age := c.Query("age")
ages, _ := strconv.Atoi(age)
s := gorm.Student{Name: username, Age: ages}
db.Create(&s)
u := gorm.Student{}
db.Where("name = ?", "zz").Find(&u)
fmt.Println(u.Age, u.Name)
name := u.Name
agess := u.Age
c.JSON(http.StatusOK, gin.H{
"name": name,
"ages": agess,
})
})
- user/id/name
g.GET("/user/:id/:name", func(c *gin.Context) {
id := c.Param("id")
name := c.Param("name")
c.JSON(http.StatusOK, gin.H{
"id": id,
"name": name,
})
})
>前端給後端傳遞 json
擷取前端的POST請求體
g.POST("/json", func(c *gin.Context) {
// request body, 擷取請求體
// b []byte
b, _ := c.GetRawData()
var m map[string]interface{}
// b []byte
_ = json.Unmarshal(b, &m)
c.JSON(http.StatusOK, gin.H{
"m": m,
})
})
>form表單
g.POST("/user/info", func(c *gin.Context) {
username := c.PostForm("username")
password := c.PostForm("password")
c.JSON(http.StatusOK, gin.H{
"username": username,
"password": password,
})
})
>重定向
g.GET("/test", func(c *gin.Context) {
// 重定向的狀态碼是301
c.Redirect(301, "https://www.kuangstudy.com")
})
>404 NoRoute
g.NoRoute(func(c *gin.Context) {
c.HTML()
})
>路由組
urlGroup := g.Group("/user")
{ // /user/add
urlGroup.GET("/add")
// /user/login
urlGroup.GET("/login")
}
orderGroup := g.Group("/order")
{ // /order/add
orderGroup.GET("/add")
}