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

行动起来,活在当下

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

目 录CONTENT

文章目录
Go

beego笔记(2)之控制器

zze
zze
2021-07-23 / 0 评论 / 0 点赞 / 479 阅读 / 3158 字

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

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

评论区