此系列我仅会记录一些 Beego 的基本使用以及常用语法,而不会对每个知识点详述,尽量做到以注释的形式让有 Web 开发经验的小伙伴一看就懂,也让自己在以后忘了某个语法或知识点的时候看到这里能迅速找回感觉~
标准控制器
package main
import (
"fmt"
"github.com/beego/beego/v2/server/web"
)
type Demo1Controller struct {
web.Controller
}
// 以 Get method 访问 /demo1/
func (c *Demo1Controller) Get() {
c.Ctx.WriteString(fmt.Sprintf("Get(): %s", c.Ctx.Input.Method()))
}
// 以 Post method 访问 /demo1/
func (c *Demo1Controller) Post() {
c.Ctx.WriteString(fmt.Sprintf("Post(): %s", c.Ctx.Input.Method()))
}
// 以 Put method 访问 /demo1/
func (c *Demo1Controller) Put() {
c.Ctx.WriteString(fmt.Sprintf("Put(): %s", c.Ctx.Input.Method()))
}
// 以 Delete method 访问 /demo1/
func (c *Demo1Controller) Delete() {
c.Ctx.WriteString(fmt.Sprintf("Delete(): %s", c.Ctx.Input.Method()))
}
type Demo2Controller struct {
web.Controller
}
// 以 Get method 方法访问格式为 /login/username/<username>/ 的 Path
func (c *Demo2Controller) Get() {
username := c.Ctx.Input.Param(":username")
c.Ctx.WriteString(fmt.Sprintf("login: %s", username))
/*
127.0.0.1:8080/login/username/zze/
login: zze
*/
}
func main() {
// 标准 Restful 控制器,可使用不同 Method 请求 /demo1/ 路径来访问到不同的控制器方法
web.Router("/demo1/", &Demo1Controller{})
// Url 中携带参数,在控制器中通过控制器对象的 Ctx 属性取得 context.Context 对象来获取 Url 参数
web.Router("/demo2/username/?:username/", &Demo2Controller{})
web.Run()
}
方法映射
package main
import "github.com/beego/beego/v2/server/web"
type Demo3Controller struct {
web.Controller
}
// 以 Post method 访问 /demo3/
func (c *Demo3Controller) Add() {
c.Ctx.WriteString("Add")
}
// 以 Delete method 访问 /demo3/
func (c *Demo3Controller) Del() {
c.Ctx.WriteString("Del")
}
// 以 Patch method 访问 /demo3/
func (c *Demo3Controller) Modify() {
c.Ctx.WriteString("Modify")
}
// 以 Get/head method 访问 /demo3/
func (c *Demo3Controller) Query() {
c.Ctx.WriteString("Query")
}
// 方法映射
func main() {
// 通过 <method1[,method..n]>:<func_name> 的方式将以一个或多个 method 方式的请求映射到控制器中名为 func_name 的函数
web.Router("/demo3/", &Demo3Controller{}, "get,head:Query;post:Add;delete:Del;put,patch:Modify")
web.Run()
}
自动注册控制器
package main
import "github.com/beego/beego/v2/server/web"
type Demo4Controller struct {
web.Controller
}
func (c *Demo4Controller) Add() {
c.Ctx.WriteString("Add")
}
func (c *Demo4Controller) Del() {
c.Ctx.WriteString("Del")
}
func (c *Demo4Controller) Query() {
c.Ctx.WriteString("Query")
}
func (c *Demo4Controller) Pagelist() {
c.Ctx.WriteString("Pagelist")
}
func main() {
// 通过 AutoRouter 注册自动路由,此种方式将会以控制器名称去除 Controller 部分为前缀(此处为 demo4),方法名为二级路径注册路由,此处即会注册如下几条路由:
// /demo4/add、/demo4/del、/demo4/query、/demo4/pagelist
// 可以看到所有路径字符均为小写,并且可以接收任意 method 的请求
web.AutoRouter(&Demo4Controller{})
web.Run()
}
评论区