此系列我仅会记录一些 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()
}
评论区