此系列我仅会记录一些 Beego 的基本使用以及常用语法,而不会对每个知识点详述,尽量做到以注释的形式让有 Web 开发经验的小伙伴一看就懂,也让自己在以后忘了某个语法或知识点的时候看到这里能迅速找回感觉~
package main
import (
"encoding/xml"
"github.com/beego/beego/v2/server/web"
)
type Demo2Controller struct {
web.Controller
}
// 响应字符串
func (c *Demo2Controller) F1() {
c.Ctx.WriteString("c.Ctx.WriteString()")
/*
响应:
c.Ctx.WriteString()
*/
}
// 响应字节
func (c *Demo2Controller) F2() {
c.Ctx.Output.Body([]byte("c.Ctx.Output.Body()"))
/*
响应:
c.Ctx.Output.Body()
*/
}
// 响应模板文件,该模板的渲染实际也是使用 go template 完成,go template 的详细使用可参考 https://www.zze.xyz/archives/go-template.html 。
// 更多 beego 模板的详细使用可参考官方文档:https://beego.me/docs/mvc/view/tutorial.md。
func (c *Demo2Controller) F3() {
// test.tpl 在 main.go 的同级 views 目录下
// 若不指定 c.TplName 的值,则加载 views 目录下 <控制器全名称>/<Action 方法名称>.tpl 为模板,此处即为 demo2controller/f3.tpl
c.TplName = "test.tpl"
// 传入模板的数据
c.Data["name"] = "zze"
/*
views/test.tpl:
<h1>{{ .name }}</h1>
响应:
<h1>zze</h1>
*/
}
// 响应 json
func (c *Demo2Controller) F4() {
// map 的 Key 必须为 json
c.Data["json"] = map[string]string{"a": "1", "b": "2"}
c.ServeJSON()
/*
响应:
{"a":"1","b":"2"}
*/
}
// 响应 xml
func (c *Demo2Controller) F5() {
// map 的 Key 必须为 xml,值不能是 map 类型,必须类型为 xml.Name、名为 XMLName 的属性
c.Data["xml"] = struct {
XMLName xml.Name `xml:"root"`
Name string `xml:"name"`
Age int `xml:"age"`
}{Name: "zze", Age: 18}
c.ServeXML()
/*
响应:
<root><name>zze</name><age>18</age></root>
*/
}
// 响应 yaml
func (c *Demo2Controller) F6() {
// map 的 Key 必须为 yaml
c.Data["yaml"] = map[string]string{"a": "1", "b": "2"}
c.ServeYAML()
/*
响应:
a: "1"
b: "2"
*/
}
// 响应重定向
func (c *Demo2Controller) F7() {
c.Redirect("https://www.zze.xyz", 302)
/*
$ curl -I 127.0.0.1:8080/demo2/f7
HTTP/1.1 302 Found
Content-Type: text/html; charset=utf-8
Location: https://www.zze.xyz
Date: Mon, 09 Aug 2021 11:48:47 GMT
*/
}
// 响应错误状态码
func (c *Demo2Controller) F8() {
c.Abort("404")
/*
$ curl -I 127.0.0.1:8080/demo2/f8
HTTP/1.1 404 Not Found
Date: Mon, 09 Aug 2021 11:47:22 GMT
Content-Length: 2000
Content-Type: text/html; charset=utf-8
*/
}
// 响应连接关闭
func (c *Demo2Controller) F9() {
c.StopRun()
/*
HTTP/1.1 200 OK
Date: Mon, 09 Aug 2021 11:51:13 GMT
Content-Length: 0
Connection: close
*/
}
func main() {
web.AutoRouter(&Demo2Controller{})
web.Run()
}
评论区