摘要:beego是一个快速开发Go应用的http框架。beego可以用来快速开发API、Web、后端服务等各种应用。本节可以学习到beego的环境安装、新建beego项目、beego项目中的模板文件及静态文件使用、页面渲染、创建路由、get请求
一、beego环境安装
这里使用的是 go1.16.10 windows/386版本
go env -w GO111MODULE=on
go get github.com/beego/bee
go get github.com/astaxie/beego
//创建一个beego项目
bee new beeProject
//进入项目
cd beeProject
//初始化mod
go mod init
//安装依赖到vendor文件夹中
go mod vendor
//启动项目
bee run
启动成功以后可以在127.0.0.1:8080看到网页。

二、模板文件及静态文件的使用
1、模板文件
默认路径:项目根目录下的views文件夹
修改路径的两种方式:
- beego.Run()之前设置:
beego.SetViewsPath("testview")
- 配置文件中设置:/conf/app.conf
viewspath = "testview"
2、静态文件
默认路径:项目根目录下的static文件夹
修改路径:beego.Run()之前设置:beego.SetStaticPath("/static","front")
注意:第一个参数是前端使用的开始路径,第二个参数是对应的文件夹
三、渲染
1、结构体数据渲染
type User struct {
Id uint
Name string
Age uint
}
//第一种方法
var user User
user.Id = 1
user.Age = 21
user.Name = "zlx"
//第二种方法
user := User{
Id: 2,
Name: "zlx",
Age: 21,
}
c.Data["User"] = user
//index.html:
{{.User.Id}}
{{.User.Name}}
{{.User.Age}}
2、数组渲染
lista := [5]int{1,2,3,4,5}
c.Data["arr"] = lista
//index.html:
第一种:
{{range $i,$v := .arr}}
{{$i}}
{{$v}}
{{end}
第二种:
{{range .arr}}
{{.}}
{{end}}
3、结构体数组渲染
users := [2]User{
{
Id:1,
Name:z,
Age:1,
},
{
Id:1,
Name:z,
Age:1,
},
}
c.Data["users"] = users
//index.html
{{range .users}}
{{.Id}}
{{.Name}}
{{.Age}}
<br>
{{end}}
4、map渲染
mapTestString := map[string]string{
"name":"zlx",
"age":"18",
}
mapTestInt := map[string]interface{}{
"name":"nina",
"age":18,
}
c.Data["maptest"] = mapTestString
c.Data["maptest1"] = mapTestInt
//index.html
//第一种方法
{{.maptest.name}}
{{.maptest.age}}
//第二种方法
{{range &k,&v := .maptest1}}
{{$k}}
{{$v}}
<br>
{{end}}
5、map + struct 渲染
map_struct := map[string]User{
"user1":{
Id:1,
Name:"zlx",
Age:5,
},
"user2":{
Id:2,
Name:"nina",
Age:23,
},
}
c.Data["mapStruct"] = map_struct
//index.html
//第一种方法
{{.mapStruct.user1}}
{{.mapStruct.user2.Name}}
//第二种方法
{{range $v := .mapStruct}}
{{$v}}
{{$v.Name}}
{{end}}
6、切片渲染
slice := []int{2,4,5,6,3,7,2,45,67}
c.Data["slice"] = slice
//index.html
7、字符串渲染
c.Ctx.WriteString("this is a string test !")
四、路由
在controllers目录下新建一个go文件,如:user.go
在views目录下新建一个html文件,如:user.html
//user.go
package controllers
import "github.com/astaxie/beego"
type UserController struct{
beego.Controller
}
func (u *UserController) Get(){
u.TplName("user.html")
}
//router.go
package routers
import (
"beeProject/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/", &controllers.MainController{})
beego.Router("/user",&controllers.UserController{})
}
//user.html
<span>this is user html</span>
五、前端向后端传递数据
获取用户传递的数据,包括 Get、POST 等方式的请求,beego 里面会自动解析这些数据,可以通过如下方式获取数据
- GetString(key string) string
- GetStrings(key string) []string
- GetInt(key string) (int64, error)
- GetBool(key string) (bool, error)
- GetFloat(key string) (float64, error)
1、get请求的两种传参方式,
第一种传参方式:
//router.go
beego.Router("/user/?:id",$controllers.UserController{})
//user.go
func (u *UserController) Get(){
id := u.GetString(":id")
u.Data["id"] = id
u.TplName("user.html")
}
//user.html
这是id返回值:{{.id}}
//url test
http://127.0.0.1:8080/user/123 //返回123
http://127.0.0.1:8080/user/asdfzxcv //返回asdfzxcv
第二种传参方式:
//router.go
beego.Router("/user",&controllers.UserController)
//user.go
func (u *UserController) Get(){
id := u.GetString("id")
u.Data["id"] = id
u.TplName("user.html")
}
//user.html
这是id返回值:{{.id}}
//url test
http://127.0.0.1:8080/user/123 //返回123
http://127.0.0.1:8080/user/asdfzxcv //报错
只能传int类型
//第一种:
//router.go
beego.Router("/user/?:id:int",$controllers.UserController{})
//user.go
func (u *UserController) Get(){
id := u.GetString(":id")
u.Data["id"] = id
u.TplName("user.html")
}
//user.html
这是id返回值:{{.id}}
//url test
http://127.0.0.1:8080/user/123 //返回123
http://127.0.0.1:8080/user/asdfzxcv //报错
----------------------------------------------------------------------------
//第二种:
//router.go
beego.Router("/user/?:id",&controllers.UserController)
//user.go
func (u *UserController) Get(){
id , err := u.GetInt(":id")
if err != nil{
u.Ctx.WriteString("只能输入数字")
}
u.Data["id"] = id
u.TplName("user.html")
}
//user.html
这是id返回值:{{.id}}
//url test
http://127.0.0.1:8080/user/123 //返回123
http://127.0.0.1:8080/user/asdfzxcv //报错
----------------------------------------------------------------------------
//第三种
//router.go
beego.Router("/user",&controllers.UserController)
//user.go
func (u *UserController) Get(){
id , err := u.GetInt("id")
if err != nil{
u.Ctx.WriteString("只能输入数字")
}
u.Data["id"] = id
u.TplName("user.html")
}
//user.html
这是id返回值:{{.id}}
//url test
http://127.0.0.1:8080/user/123 //返回123
http://127.0.0.1:8080/user/asdfzxcv //报错