天天看點

Go語言Web架構Gin(Day7)

目錄

>開啟一個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,
		})
	})
           
Go語言Web架構Gin(Day7)

>重定向

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")
	}