Gin路由与路由文件分组的实现实例

Written by

in

文章目录
  • 路由(Routing)是由一个 URL(或者叫路径)和一个特定的 HTTP 方法(GET、POST等)组成的,涉及到应用如何响应客户端对某个网站节点的访问。
  • package main import ( “github.com/gin-gonic/gin” “net/http” ) func main() { r := gin.Default() // localhost:8080/get?username=zhangsan&password=123 r.GET(“/get”, func(c *gin.Context) { // 使用c.Query()获取请求当中的参数 username := c.Query(“username”) password := c.Query(“password”) // 当请求路径当中没有带有 age 参数时,使用默认值18 age := c.DefaultQuery(“age”, “18”) c.JSON(http.StatusOK, gin.H{ “msg”: “Get…”, “username”: username, “password”: password, “age”: age, }) }) r.Run() } 使用 Postman 进行测试
  • 域名/user/20 package main import ( “github.com/gin-gonic/gin” “net/http” ) func main() { r := gin.Default() r.GET(“/user/:uid”, func(c *gin.Context) { // 使用c.Param()获取请求当中的参数 uid := c.Param(“uid”) c.JSON(http.StatusOK, gin.H{ “msg”: “动态路由传值…”, “uid”: uid, }) }) r.Run() } 使用 Postman 进行测试
  • add.html <!DOCTYPE html> <html lang=”en”> <head> <meta charset=”UTF-8″> <title>Title</title> </head> <body> <form action=”/toAdd” method=”post”> 用户名 <input type=”text” name=”username”> 密码 <input type=”password” name=”password”> <input type=”submit” value=”提交”> </form> </body> </html> package main import ( “github.com/gin-gonic/gin” “net/http” ) func main() { r := gin.Default() // 配置模板的文件 r.LoadHTMLGlob(“templates/*”) // 输入localhost:8080/add 跳转到add.html页面 r.GET(“/add”, func(c *gin.Context) { c.HTML(200, “add.html”, gin.H{}) }) r.POST(“/toAdd”, func(c *gin.Context) { // 使用c.PostForm()获取请求当中的参数 username := c.PostForm(“username”) password := c.PostForm(“password”) // 当表单当中没有 age ,使用默认值18 age := c.DefaultPostForm(“age”, “18”) c.JSON(200, gin.H{ “username”: username, “password”: password, “age”: age, }) }) r.Run() }
  • package main import ( “github.com/gin-gonic/gin” ) func main() { r := gin.Default() userRoutes := r.Group(“/user”) { userRoutes.GET(“/add”, func(c *gin.Context) { c.JSON(200, gin.H{ “msg”: “userAdd…”, }) }) userRoutes.GET(“/edit”, func(c *gin.Context) { c.JSON(200, gin.H{ “msg”: “userEdit…”, }) }) } adminRoutes := r.Group(“/admin”) { userRoutes.GET(“/add”, func(c *gin.Context) { c.JSON(200, gin.H{ “msg”: “adminAdd…”, }) }) userRoutes.GET(“/edit”, func(c *gin.Context) { c.JSON(200, gin.H{ “msg”: “adminEdit…”, }) }) } r.Run() } 使用 Postman 进行测试
  • 在项目的根目录下新建 routes 文件夹,并新建 go 文件 DefaultRoutes.go package routes import “github.com/gin-gonic/gin” func DefaultRoutesInit(r *gin.Engine) { defaultRoutes := r.Group(“/”) { defaultRoutes.GET(“/”, func(c *gin.Context) { c.String(200, “首页”) }) defaultRoutes.GET(“/news”, func(c *gin.Context) { c.String(200, “新闻”) }) } } AdminRoutes.go package routes import “github.com/gin-gonic/gin” func AdminRoutesInit(r *gin.Engine) { adminRoutes := r.Group(“/admin”) { adminRoutes.GET(“/”, func(c *gin.Context) { c.String(200, “admin…”) }) adminRoutes.GET(“/userlist”, func(c *gin.Context) { c.String(200, “admin—userlist”) }) adminRoutes.GET(“/plist”, func(c *gin.Context) { c.String(200, “admin—plist”) }) } } ApiRoutes.go package routes import “github.com/gin-gonic/gin” func ApiRoutesInit(r *gin.Engine) { apiRoutes := r.Group(“/api”) { apiRoutes.GET(“/”, func(c *gin.Context) { c.String(200, “我是一个api接口”) }) apiRoutes.GET(“/userlist”, func(c *gin.Context) { c.String(200, “我是一个api接口—userlist”) }) apiRoutes.GET(“/plist”, func(c *gin.Context) { c.String(200, “我是一个api接口—plist”) }) } } main.go package main import ( “Gin_demo/routes” “fmt” “github.com/gin-gonic/gin” “html/template” “time” ) func main() { r := gin.Default() // 配置模板的文件 r.LoadHTMLGlob(“templates/*”) // 配置静态web目录 第一个参数表示路由,第二个参数表示映射的路径. r.Static(“/static”, “./static”) routes.DefaultRoutesInit(r) routes.ApiRoutesInit(r) routes.AdminRoutesInit(r) r.Run() } 到此这篇关于Gin 路由与路由文件分组的实现实例的文章就介绍到这了,更多相关Gin 路由与路由文件分组内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Golang中Gin框架中如何定义路由详解 基于gin的golang web开发:路由示例详解 浅析Gin框架中路由参数的使用 GIN的路由以及传参问题 Golang使用Gin框架实现路由分类处理请求流程详解 Go Gin框架路由相关bug分析 Go Gin框架中的路由组及其优先级探索分析
  • 目录
    • 路由
    • GET 请求传值
    • 动态路由传值
    • POST 请求传值(获取form表单数据)
    • 简单的路由组
    • Gin 路由文件分组

    路由(Routing)是由一个 URL(或者叫路径)和一个特定的 HTTP 方法(GET、POST等)组成的,涉及到应用如何响应客户端对某个网站节点的访问。

    package main
    
    import (
    	"github.com/gin-gonic/gin"
    	"net/http"
    )
    
    func main() {
    	r := gin.Default()
    
    	// localhost:8080/get?username=zhangsan&password=123
    	r.GET("/get", func(c *gin.Context) {
    		// 使用c.Query()获取请求当中的参数
    		username := c.Query("username")
    		password := c.Query("password")
    		// 当请求路径当中没有带有 age 参数时,使用默认值18
    		age := c.DefaultQuery("age", "18")
    		c.JSON(http.StatusOK, gin.H{
    			"msg":      "Get...",
    			"username": username,
    			"password": password,
    			"age":      age,
    		})
    	})
    	r.Run()
    }
    

    使用 Postman 进行测试

    域名/user/20

    package main
    
    import (
    	"github.com/gin-gonic/gin"
    	"net/http"
    )
    
    func main() {
    	r := gin.Default()
    
    	r.GET("/user/:uid", func(c *gin.Context) {
    		// 使用c.Param()获取请求当中的参数
    		uid := c.Param("uid")
    		c.JSON(http.StatusOK, gin.H{
    			"msg": "动态路由传值...",
    			"uid": uid,
    		})
    	})
    	r.Run()
    }
    
    

    使用 Postman 进行测试

    add.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <form action="/toAdd" method="post">
      用户名 <input type="text" name="username">
    
    
      密码 <input type="password" name="password">
    
    
      <input type="submit" value="提交">
    </form>
    
    </body>
    </html>
    
    package main
    
    import (
    	"github.com/gin-gonic/gin"
    	"net/http"
    )
    
    func main() {
    	r := gin.Default()
    	// 配置模板的文件
    	r.LoadHTMLGlob("templates/*")
    
    	// 输入localhost:8080/add 跳转到add.html页面
    	r.GET("/add", func(c *gin.Context) {
    		c.HTML(200, "add.html", gin.H{})
    	})
    	r.POST("/toAdd", func(c *gin.Context) {
    		// 使用c.PostForm()获取请求当中的参数
    		username := c.PostForm("username")
    		password := c.PostForm("password")
    		// 当表单当中没有 age ,使用默认值18
    		age := c.DefaultPostForm("age", "18")
    		c.JSON(200, gin.H{
    			"username": username,
    			"password": password,
    			"age":      age,
    		})
    	})
    	r.Run()
    }
    
    

    package main
    
    import (
    	"github.com/gin-gonic/gin"
    )
    
    
    func main() {
    	r := gin.Default()
    	
    	userRoutes := r.Group("/user")
    	{
    		userRoutes.GET("/add", func(c *gin.Context) {
    			c.JSON(200, gin.H{
    				"msg": "userAdd...",
    			})
    		})
    		userRoutes.GET("/edit", func(c *gin.Context) {
    			c.JSON(200, gin.H{
    				"msg": "userEdit...",
    			})
    		})
    	}
    	
    	adminRoutes := r.Group("/admin")
    	{
    		userRoutes.GET("/add", func(c *gin.Context) {
    			c.JSON(200, gin.H{
    				"msg": "adminAdd...",
    			})
    		})
    		userRoutes.GET("/edit", func(c *gin.Context) {
    			c.JSON(200, gin.H{
    				"msg": "adminEdit...",
    			})
    		})
    	}
    
    	r.Run()
    }
    
    

    使用 Postman 进行测试

    在项目的根目录下新建 routes 文件夹,并新建 go 文件

    DefaultRoutes.go

    package routes
    
    import "github.com/gin-gonic/gin"
    
    func DefaultRoutesInit(r *gin.Engine) {
    	defaultRoutes := r.Group("/")
    	{
    		defaultRoutes.GET("/", func(c *gin.Context) {
    			c.String(200, "首页")
    		})
    		defaultRoutes.GET("/news", func(c *gin.Context) {
    			c.String(200, "新闻")
    		})
    	}
    }
    

    AdminRoutes.go

    package routes
    
    import "github.com/gin-gonic/gin"
    
    func AdminRoutesInit(r *gin.Engine) {
    	adminRoutes := r.Group("/admin")
    	{
    		adminRoutes.GET("/", func(c *gin.Context) {
    			c.String(200, "admin...")
    		})
    		adminRoutes.GET("/userlist", func(c *gin.Context) {
    			c.String(200, "admin---userlist")
    		})
    		adminRoutes.GET("/plist", func(c *gin.Context) {
    			c.String(200, "admin---plist")
    		})
    	}
    }
    

    ApiRoutes.go

    package routes
    
    import "github.com/gin-gonic/gin"
    
    func ApiRoutesInit(r *gin.Engine) {
    	apiRoutes := r.Group("/api")
    	{
    		apiRoutes.GET("/", func(c *gin.Context) {
    			c.String(200, "我是一个api接口")
    		})
    		apiRoutes.GET("/userlist", func(c *gin.Context) {
    			c.String(200, "我是一个api接口---userlist")
    		})
    		apiRoutes.GET("/plist", func(c *gin.Context) {
    			c.String(200, "我是一个api接口---plist")
    		})
    	}
    }
    

    main.go

    package main
    
    import (
    	"Gin_demo/routes"
    	"fmt"
    	"github.com/gin-gonic/gin"
    	"html/template"
    	"time"
    )
    
    func main() {
    	r := gin.Default()
    	// 配置模板的文件
    	r.LoadHTMLGlob("templates/*")
    	// 配置静态web目录  第一个参数表示路由,第二个参数表示映射的路径.
    	r.Static("/static", "./static")
    	
    	routes.DefaultRoutesInit(r)
    	routes.ApiRoutesInit(r)
    	routes.AdminRoutesInit(r)
    
    	r.Run()
    }
    
    

    到此这篇关于Gin 路由与路由文件分组的实现实例的文章就介绍到这了,更多相关Gin 路由与路由文件分组内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • Golang中Gin框架中如何定义路由详解
    • 基于gin的golang web开发:路由示例详解
    • 浅析Gin框架中路由参数的使用
    • GIN的路由以及传参问题
    • Golang使用Gin框架实现路由分类处理请求流程详解
    • Go Gin框架路由相关bug分析
    • Go Gin框架中的路由组及其优先级探索分析

    站内搜索