侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 748 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录
Go

beego笔记(1)之静态路由和正则路由

zze
zze
2021-07-12 / 1 评论 / 0 点赞 / 247 阅读 / 3678 字

不定期更新相关视频,抖音点击左上角加号后扫一扫右方侧边栏二维码关注我~正在更新《Shell其实很简单》系列

此系列我仅会记录一些 Beego 的基本使用以及常用语法,而不会对每个知识点详述,尽量做到以注释的形式让有 Web 开发经验的小伙伴一看就懂,也让自己在以后忘了某个语法或知识点的时候看到这里能迅速找回感觉~

导包

import (
	"fmt"
	"github.com/beego/beego/v2/server/web"
	"github.com/beego/beego/v2/server/web/context"
)

静态路由

// 静态路由,多种 Method 支持
func main() {
	// 支持方法:
	// 		Delete
	//		Put
	//		Options
	//		Head
	//		Patch
	// 处理 Get 请求
	web.Get("/", func(ctx *context.Context) {
		name := ctx.Input.Query("name")
		ctx.WriteString(fmt.Sprintf("[Method: %s]你输入的名字:%s", ctx.Input.Method(), name))
		/*
			GET /?name=zze HTTP/1.1
			Content-Type: application/x-www-form-urlencoded; charset=utf-8
			Host: 127.0.0.1:8080
			Connection: close
			User-Agent: Paw/3.2.2 (Macintosh; OS X/11.4.0) GCDHTTPRequest

			[Method: GET]你输入的名字:zze
		*/
	})
	// 处理 Post 请求
	web.Post("/", func(ctx *context.Context) {
		// Query 不仅能获取 Url 参数,还能获取 Post 请求时的 Body 中的参数
		name1 := ctx.Input.Query("name1")
		name2 := ctx.Input.Query("name2")
		ctx.WriteString(fmt.Sprintf("[Method: %s]你输入的名字:queryname[%s], bodyname[%s]", ctx.Input.Method(), name1, name2))
		/*
			POST /?name1=zze1 HTTP/1.1
			Content-Type: application/x-www-form-urlencoded; charset=utf-8
			Host: 127.0.0.1:8080
			Connection: close
			User-Agent: Paw/3.2.2 (Macintosh; OS X/11.4.0) GCDHTTPRequest
			Content-Length: 10

			name2=zze2

			[Method: POST]你输入的名字:queryname[zze1], bodyname[zze2]
		*/
	})
	// Any 处理任何方法的请求
	web.Any("/Any", func(ctx *context.Context) {

		ctx.WriteString(ctx.Input.Method())
		/*
			POST /Any/ HTTP/1.1
			Content-Type: application/x-www-form-urlencoded; charset=utf-8
			Host: 127.0.0.1:8080
			Connection: close
			User-Agent: Paw/3.2.2 (Macintosh; OS X/11.4.0) GCDHTTPRequest
			Content-Length: 0

			POST

			PATCH /Any/ HTTP/1.1
			Content-Type: application/x-www-form-urlencoded; charset=utf-8
			Host: 127.0.0.1:8080
			Connection: close
			User-Agent: Paw/3.2.2 (Macintosh; OS X/11.4.0) GCDHTTPRequest
			Content-Length: 0

			PATCH
		*/
	})

	web.Run()
}

正则路由

// 正则路由
func main() {
	// 匹配数字格式 (\d+) 的路由,并将匹配的值存放到 :id 参数
	web.Get("/user/:id(\\d+)/", func(ctx *context.Context) {
		id := ctx.Input.Param(":id")
		ctx.WriteString(fmt.Sprintf("id: %s", id))
		/*
			127.0.0.1:8080/user/1/
			id: 1
		*/
	})
	// 匹配 \b\w+\b
	web.Get("/user/:name(\\b\\w+\\b)/", func(ctx *context.Context) {
		name := ctx.Input.Param(":name")
		ctx.WriteString(fmt.Sprintf("name: %s", name))
		/*
			127.0.0.1:8080/user/zze/
			name: zze
		*/
	})
	// 匹配任意内容
	web.Get("/:content/", func(ctx *context.Context) {
		content := ctx.Input.Param(":content")
		ctx.WriteString(fmt.Sprintf("content: %s", content))
		/*
			127.0.0.1:8080/user-zze/
			content: user-zze
		*/
	})
	// 匹配文件
	web.Get("/file/*", func(ctx *context.Context) {
		content := ctx.Input.Param(":splat")
		ctx.WriteString(fmt.Sprintf("filename: %s", content))
		/*
			127.0.0.1:8080/file/xxx.txt
			filename: xxx.txt
		*/
	})
	// 匹配文件路径和后缀
	web.Get("/files/*.*", func(ctx *context.Context) {
		path := ctx.Input.Param(":path")
		ext := ctx.Input.Param(":ext")
		ctx.WriteString(fmt.Sprintf("path: %s, ext: %s", path, ext))
	})
	/*
		127.0.0.1:8080/files/xxx.txt
		path: xxx, ext: txt

		127.0.0.1:8080/files/xxx/xxx.txt
		path: xxx/xxx, ext: txt
	*/
	web.Run()
}
0

评论区