1、創建一個新項目 bee new gowork
典型的MVC架構,目錄結構如下
gowork
|-- conf
| `-- app.conf
|-- controllers
| `-- default.go ----------------控制器邏輯文件
|-- main.go ----------------入口文件
|-- models
|-- routers
| `-- router.go ------------------路由文件
|-- static
| |-- css
| |-- img
| `-- js
|-- tests
| `-- default_test.go
|-- views ------------------模板文件
| `--index.tpl
解析:
(1)路由文件:routers/router.go
package routers
import (
"workbee/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/", &controllers.MainController{})
// 增加一條路由,通過訪問 /user就能執行 UserController控制器
beego.Router("/user", &controllers.UserController{})
}
(2)控制器文件:controllers\default.go
package controllers
import (
"github.com/astaxie/beego"
)
// 聲明瞭一個控制器MainController,這個控制器裏面內嵌了beego.Controller,這就是 Go 的嵌入方式,類似於類的繼承
// MainController擁有了父類beego.Controller所有的方法Init、Prepare、Post、Get、Delete
type MainController struct {
beego.Controller
}
func (c *MainController) Get() {
c.Data["Website"] = "beego.me"
c.Data["Email"] = "[email protected]"
c.TplName = "index.tpl"
}
// 新建一個控制器 UserController
type UserController struct {
beego.Controller
}
func (c *UserController) Get() {
c.Data["Website"] = "小紅"
c.Data["Email"] = "[email protected]"
// 渲染到模板文件 views\user.tpl
c.TplName = "user.tpl"
// this.Ctx.WriteString 直接輸出字符串
// this.Ctx.WriteString("hello")
}
(3)模板文件:views\user.tpl
<!DOCTYPE html>
<html>
<head>
<title>小紅</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
</style>
</head>
<body>
<header>
<h1 class="logo">蒙多是個大噴子</h1>
<div class="description">
窗前明月光,疑是地上霜
</div>
</header>
<footer>
<div class="author">
<a href="http://{{.Website}}">{{.Website}}</a> /
<a class="email" href="mailto:{{.Email}}">{{.Email}}</a>
</div>
</footer>
<div class="backdrop"></div>
<script src="/static/js/reload.min.js"></script>
</body>
</html>