摘要: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   //报错