前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Golang框架Gin入门实战--(5)Get、Post以及动态路由转值、Get Post数据解析到结构体、Post Xml数据解析到结构体

Golang框架Gin入门实战--(5)Get、Post以及动态路由转值、Get Post数据解析到结构体、Post Xml数据解析到结构体

作者头像
互联网-小阿宇
发布2022-11-21 21:42:27
1.1K0
发布2022-11-21 21:42:27
举报
文章被收录于专栏:互联网-小阿宇

Golang框架Gin入门实战–(5)Get、Post以及动态路由转值、Get Post数据解析到结构体、Post Xml数据解析到结构体

此篇文章内容基于上篇文章继续修改Golang框架Gin入门实战–(4)HTML模板渲染以及模板语法 自定义模板函数 静态文件服务(下) main.go

代码语言:javascript
复制
package main

import (
	"encoding/xml"
	"fmt"
	"html/template"
	"time"

	"github.com/gin-gonic/gin"
)

type UserInfo struct {
	Username string `json:"username" form:"username"`
	Password string `json:"password" form:"password"`
}

type Article struct {
	Title   string `json:"title" xml:"title"`
	Content string `json:"content" xml:"content"`
}

//时间戳转换成日期
func UnixToTime(timestamp int) string {
	fmt.Println(timestamp)
	t := time.Unix(int64(timestamp), 0)

	return t.Format("2006-01-02 15:04:05")
}
func Println(str1 string, str2 string) string {
	fmt.Println(str1, str2)
	return str1 + "-----" + str2

}
func main() {
	r := gin.Default()
	//自定义模板函数  注意要把这个函数放在加载模板前
	r.SetFuncMap(template.FuncMap{
		"UnixToTime": UnixToTime,
		"Println":    Println,
	})
	//加载模板
	r.LoadHTMLGlob("templates/**/*")
	//  配置静态web目录 第一个参数表示路由 第二个参数表示映射的目录
	r.Static("/static", "./static")

	//Get请求传值
	r.GET("/", func(c *gin.Context) {
		username := c.Query("username")
		age := c.Query("age")
		page := c.DefaultQuery("page", "1")
		c.JSON(200, gin.H{
			"username": username,
			"age":      age,
			"page":     page,
		})

	})
	// Get请求传值  id
	r.GET("/article", func(c *gin.Context) {
		id := c.DefaultQuery("id", "1")
		c.JSON(200, gin.H{
			"msg": "新闻详情",
			"id":  id,
		})

	})

	//Post演示
	r.GET("/user", func(c *gin.Context) {
		c.HTML(200, "default/user.html", gin.H{})
	})
	// 获取表单post过来的数据
	r.POST("/doAddUser1", func(c *gin.Context) {
		username := c.PostForm("username")
		password := c.PostForm("password")
		age := c.DefaultPostForm("age", "20")

		c.JSON(200, gin.H{
			"username": username,
			"password": password,
			"age":      age,
		})
	})

	//获取 GET POST传递的数据绑定到结构体
	r.GET("/getUser", func(c *gin.Context) {

		user := &UserInfo{}
		if err := c.ShouldBind(&user); err == nil {
			fmt.Printf("%#v", user)
			c.JSON(200, user)
		} else {
			c.JSON(200, gin.H{
				"err": err.Error(),
			})
		}
	})
	r.POST("/doAddUser2", func(c *gin.Context) {

		user := &UserInfo{}
		if err := c.ShouldBind(&user); err == nil {
			c.JSON(200, user)
		} else {
			c.JSON(200, gin.H{
				"err": err.Error(),
			})
		}
	})

	//获取Post Xml数据
	r.POST("/xml", func(c *gin.Context) {
		article := &Article{}
		xmlSliceData, _ := c.GetRawData() //获取从c.Request.Body读取请求数据

		fmt.Println(xmlSliceData)
		if err := xml.Unmarshal(xmlSliceData, &article); err == nil {
			c.JSON(200, article)
		} else {
			c.JSON(400, gin.H{
				"err": err.Error(),
			})
		}
	})

	//动态路由传值
	//list/123        list/456
	r.GET("/list/:cid", func(c *gin.Context) {
		cid := c.Param("cid")
		c.String(200, "%v", cid)
	})
	//后台
	r.GET("/admin", func(c *gin.Context) {
		c.HTML(200, "admin/index.html", gin.H{
			"title": "后台首页",
		})

	})

	r.Run()
}

将GINDEMO/templates/default/news.html 重命名为 user.html 并修改内容

代码语言:javascript
复制
{{define "default/user.html"}}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="static/css/base.css">
</head>
<body>
    <form action="/doAddUser2" method="post">

        用户名:<input type="text" name="username" /> <br><br>
        密码:<input type="password" name="password" /> <br><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>
{{end}}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Golang框架Gin入门实战–(5)Get、Post以及动态路由转值、Get Post数据解析到结构体、Post Xml数据解析到结构体
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档