Beego框架学习 | 青训营

173 阅读3分钟

1.1软件框架

一个公司是由公司中的各部部门来组成的,每一个部门拥有特定的职能,部门与部门之间通过相互的配合来完成让公司运转起来。 一个软件框架是由其中各个软件模块组成的,每一个模块都有特定的功能,模块与模块之间通过相互配合来完成软件的开发。 软件框架是针对某一类软件设计问题而产生的。 作用:避免重复造轮子(写重复代码)

1.2beego

beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API、Web 及后端服务等各种应用,是一个 MVC 的框架,主要设计灵感来源于 tornado、sinatra 和 flask 这三个框架,但是结合了 Go 本身的一些特性(interface、struct 嵌入等)而设计的一个框架。

1.3MVC

M: Model,模型,数据库操作,增删改查

V: View,视图, 接收C传输的数据,组织html界面

C: Controller,控制器, 接收数据,数据处理,传输数据给M和V并接收应答,返回应答给浏览器

通过浏览器注册用户信息。

1.4环境安装

需要安装或者升级 Beego 和 Bee 的开发工具:

$ go get -u github.com/astaxie/beego
$ go get -u github.com/beego/bee

安装完之后,bee 可执行文件默认存放在 GOPATH/bin 里面,所以需要把 GOPATH/bin 里面,所以需要把 GOPATH/bin 添加到您的环境变量中,才可以进行下一步

$ echo 'export PATH="$GOPATH/bin:$PATH"' >> ~/.bashrc

$ source .bashrc

安装好之后,运营bee new quickstart来创建一个项目,注意:通过bee创建的项目代码都是在$GOPATH/src目录下面。

生成的项目目录结构如下: image.png 进入项目目录执行bee run命令,在浏览器输入网址:127.0.0.1:8080,显示如下:

1.png

 

1.5 beego的项目结构分析

2.jpg

从上面的目录结构我们可以看出来 M(models 目录)、V(views 目录)和 C(controllers 目录)的结构, main.go 是入口文件。

1.6项目路由设置

打开我们项目的入口main.go

package main import (

    _ "quickstart/routers"

    "github.com/astaxie/beego" ) func main() {     beego.Run() } 我们知道main函数是整个项目的入口并且go的执行过程如下图所示:

3.png

这时候我们就发现了main里面导入了"quickstart/routers",并且执行了这个包里面的init函数,routers包的内容如下:

package routers import (     "quickstart/controllers"     "github.com/astaxie/beego" ) func init() {     beego.Router("/", &controllers.MainController{}) }

路由包里面我们看到执行了路由注册 beego.Router, 这个函数的功能是映射 URL 到 controller,第一个参数是 URL (用户请求的地址),这里我们注册的是 /,也就是我们访问的不带任何参数的 URL,第二个参数是对应的 Controller,也就是我们即将把请求分发到那个控制器来执行相应的逻辑,我们可以执行类似的方式注册如下路由:

beego.Router("/user", &controllers.UserController{}) 这样用户就可以通过访问 /user 去执行 UserController 的逻辑。这就是我们所谓的路由(要在controllers包里面有名字为UserController才能调用)

1.7ORM

beego中内嵌了ORM框架,ORM框架可以将结构体和数据表进行对应起来,只需要通过结构体和对象就可以对数据表进行操作。

设计类:模型类。 ORM另外一个作用:根据设计的类生成数据库中的表。

安装ORM go get github.com/astaxie/beego/orm

go get -u github.com/go-sql-driver/mysql // 设置数据库基本信息

orm.RegisterDataBase("default", "mysql", "root:123456@tcp(127.0.0.1:3306)/test1?charset=utf8")     

// 映射model数据

orm.RegisterModel(new(Book))

// 生成表

orm.RunSyncdb("default", false, true)

1.7.1 ORM对数据进行操作

插入

o := orm.NewOrm()

var user User

user.Name = "slene"

user.Pwd= true
id, err := o.Insert(\&user)

if err == nil {

    fmt.Println(id)

}

查询

o := orm.NewOrm()

user := User{Id: 1}

err := o.Read(\&user)

也可以指定字段查询

user := User{Name: "slene"}

err = o.Read(\&user, "Name")

更新

o := orm.NewOrm()

user := User{Id: 1}

if o.Read(\&user) == nil {

    user.Name = "MyName"

    if num, err := o.Update(\&user); err == nil {

        fmt.Println(num)

    }

}

也可以指定更新的字段

// 只更新 Name

o.Update(\&user, "Name")

// 指定多个字段

// o.Update(\&user, "Field1", "Field2", ...)

删除

o := orm.NewOrm()

if num, err := o.Delete(\&User{Id: 1}); err == nil {

    fmt.Println(num)

}