(一)Beego框架之快速入门

一、Beego快速入门

1.2 Beego介绍

Beego是一个快速开发Go应用的HTTP框架,可以用来快速开发API、Web及后端服务等各种应用,是一个RESTful的框架,相对于echo框架仅包含路由和控制器核心模块、Beego是一个完整的MVC框架包括路由&控制器、model、数据库ORM封装、view模板处理。

下面一步步介绍如何快速开始一个项目。

beego 是基于八大独立的模块构建的,是一个高度解耦的框架。当初设计 beego 的时候就是考虑功能模块化,用户即使不使用 beego 的 HTTP 逻辑,也依旧可以使用这些独立模块,例如:你可以使用 cache 模块来做你的缓存逻辑;使用日志模块来记录你的操作信息;使用 config 模块来解析你各种格式的文件。所以 beego 不仅可以用于 HTTP 类的应用开发,在你的 socket 游戏开发中也是很有用的模块,这也是 beego 如此受欢迎的一个原因。大家如果玩过乐高的话,应该知道很多高级的东西都是一块一块的积木搭建出来的,而设计 beego 的时候,这些模块就是积木,高级机器人就是 beego。至于这些模块的功能以及如何使用会在后面的文档逐一介绍。

1.2 Beego的流程设计

流程图说明:

1、http请求从左侧main入口函数开始进入框架

2、UrL路由解析然后确定执行哪个控制器(controller)

3、执行请求前的过滤器 (过滤器一般用来拦截请求,例如做api签名校验,session处理,安全验证等等)

4、执行控制器 (控制器根据需要调用model,session, 日志等模块)

5、执行请求后的过滤器

6、视图输出返回给用户

二、安装Beego环境

2.1 安装Beego核心包

go get -u github.com/beego/beego/v2

2.2 安装orm包用于操作数据库,beego的orm包是独立的模块需要单独安装

go get github.com/beego/beego/v2/client/orm

2.3 安装mysql驱动, 必须安装mysql驱动,orm包才能工作

go get github.com/go-sql-driver/mysql

2.4 安装bee工具包,这个是beego开发的辅助工具,用于快速创建项目,运行项目以及打包项目

go get -u github.com/beego/bee/v2

提示:安装bee包后,需要将$GOPATH/bin路径添加到环境变量path中, 否则会提示找不到bee命令,$GOPATH代表的就是你的GOPATH路径,如果你不知道GOPATH路径在哪里,执行下go env命令,会列出所有go相关的环境变量,从里面找到GOPATH路径。

三、使用bee创建项目

下面使用bee快速创建一个新的项目, 打开命令窗口,进入$GOPATH/src目录,然后执行bee命令。

bee new beegoProject

bee工具在当前目录创建一个beegoProject的目录,里面包含了beego项目的基本结构。

提示: 如果你熟悉beego项目结构也可以手动创建项目,当然为了效率还是建议用bee快速创建。

四、项目结构

beegoProject

├── conf - 配置文件存放目录

│ └── app.conf - beego应用配置文件,里面包含一些默认的配置包括启动端口、运行模式等等

├── controllers - 控制器目录

│ └── default.go

├── main.go - 入口文件

├── models - model目录,存放我们的业务逻辑和数据库相关的操作

├── routers - 路由配置目录,主要存放我们各个业务模块的路由设置

│ └── router.go

├── static - 静态资源目录,默认静态资源访问url为 "http://域名/static/资源路径"

│ ├── css

│ ├── img

│ └── js

├── tests - 单元测试脚本目录

│ └── default_test.go

└── views - 视图模板目录

└── index.tpl

五、运行项目

前面已经创建了项目,现在可以把项目运行起来看看效果。

通过bee工具运行项目,首先在命令创建进入“项目目录”。

bee run

提示:bee运行项目,支持热编译,就是如果你修改了go文件,bee会自动重新编译,你只要刷新页面就可以看到最新的效果,不需要手动编译。

然后通过浏览器访问:http://localhost:8080,可以看到如下效果:

提示:你也可以直接运行main.go文件, 例如: go run main.go,这种方式每次修改文件,需要手动编译。

六、控制器逻辑

我们看下beego控制器怎么写?

文件: beegoProject/controllers/default.go

package controllers

import (

beego "github.com/beego/beego/v2/server/web"

)

// 定义一个控制器结构体

// 我们一般一个模块定义一个控制器

type MainController struct {

// 嵌套beego基础控制器,在go语言中嵌套struct,就类似继承的概念。

// 这里就相当于,继承了beego.Controller的方法和属性。

beego.Controller

}

// 覆盖beego.Controller的Get方法,用于处理RESTful请求中的get请求

// beego.Controller默认支持多种RESTful方法,例如:Post、Put、Delete等等

func (c *MainController) Get() {

// Data是继承过来的属性,是map类型,可以保存任意类型数据,主要用于保存请求响应数据

// 我们可以通过Data将参数,传入视图模板文件。

// 这里设置了两个参数

c.Data["Website"] = "tizi365.com"

c.Data["Email"] = "tizi365@demo.com"

// 设置需要渲染的模板文件,框架会去views目录查找这个模板文件

c.TplName = "index.tpl"

}

七、设置Url路由

下面看看怎么设置路由。

package routers

import (

"tizi365/controllers"

beego "github.com/beego/beego/v2/server/web"

)

// go 包初始化函数,go语言中在导入一个包的时候,如果被导入包存在init函数,会执行init函数

// 因此这里可以使用init函数初始化路由设置

func init() {

// 使用beego.Router函数,注册路由规则。

// 第一个参数是url路由,第二个参数是控制器

// 这里的意思就是将访问 / 这个url的请求,交给controllers.MainController控制器处理。

beego.Router("/", &controllers.MainController{})

}

如果我们增加下面路由设置:

beego.Router("/tizi365", &controllers.MainController{})

访问:http://localhost:8080/tizi365 和 http://localhost:8080/ 得到的结果一样,因为这两个url地址都是由同一个控制器处理。

路由规则说明:

大家可能发现上面的路由注册规则,只是定义了,那个url由那个控制器执行,但是没有说明url请求由控制器的那个函数执行, 一个控制器可以包含多个函数;

beego RESTful路由规则,默认是通过 请求方法 确认由那个控制器方法执行,例如get请求,由Get方法执行,POST请求由Post方法执行。

八、编写model逻辑

这里我们看一个mysql数据库操作的例子

8.1 定义表结构:

CREATE TABLE `users` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',

`username` varchar(30) NOT NULL COMMENT '账号',

`password` varchar(100) NOT NULL COMMENT '密码',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

大家可以使用自己熟悉的工具将mysql表创建好。

8.2 初始化数据库连接

一般初始化数据库连接都是在main.go入口地方是指一次就行,下面看下main.go文件改成什么样了。

package main

import (

beego "github.com/beego/beego/v2/server/web"

"github.com/beego/beego/v2/client/orm"

_ "tizi365/routers"

//导入mysql驱动,这是必须的

_ "github.com/go-sql-driver/mysql"

)

//初始化应用设置, 我们通过init函数初始化数据库连接,go语言中这个函数会优先执行

func init() {

// 这里注册一个default默认数据库,数据库驱动是mysql.

// 第三个参数是数据库dsn, 配置数据库的账号密码,数据库名等参数

// dsn参数说明:

// username - mysql账号

// password - mysql密码

// db_name - 数据库名

// 127.0.0.1:3306 - 数据库的地址和端口

orm.RegisterDataBase("default", "mysql", "username:password@tcp(127.0.0.1:3306)/db_name?charset=utf8")

}

func main() {

beego.Run()

}

为了初始化mysql连接,在入口main.go文件,增加init函数初始化数据库设置。

8.3 创建model

然后创建一个user model,文件路径:beegoProject/models/user.go,代码如下:

package models

import (

"github.com/beego/beego/v2/client/orm"

)

// 定义User模型,绑定users表结构, 其实就是用来保存sql查询结果。

type User struct {

Id int

Username string

Password string

}

// 定义User 模型绑定那个表?

func (u *User) TableName() string {

// 返回mysql表名

return "users"

}

//初始化函数,可以用来向orm注册model

func init() {

// 向orm注册user模型

orm.RegisterModel(&User{})

}

// 根据id查询用户信息

func GetUserById(id int) *User {

if id == 0 {

return nil

}

// 创建orm对象, 后面都是通过orm对象操作数据库

o := orm.NewOrm()

// 初始化一个User模型对象

user := User{}

// 设置查询参数

user.Id = id

// 调用Read方法,根据user设置的参数,查询一条记录,结果保存到user结构体变量中

// 默认是根据主键进行查询

// 等价sql: SELECT `id`, `username`, `password` FROM `users` WHERE `id` = 1

err := o.Read(&user)

// 检测查询结果,

if err == orm.ErrNoRows {

// 找不到记录

return nil

} else if err == orm.ErrMissPK {

// 找不到住建

return nil

}

return &user

}

提示: 具体的orm用法,后续教程有详细说明,这里大概了解下大概的用法。

8.4 通过控制器调用model

下面修改控制器代码

文件:beegoProject/controllers/default.go

func (c *MainController) Get() {

c.Data["Website"] = "tizi365.com"

c.Data["Email"] = "tizi365@demo.com"

// 调用model,查询用户id为1 的用户信息

user := models.GetUserById(1)

// 然后将user数据保存到Data中, 将参数传给后面的views视图模板处理

c.Data["user"] = user

// 使用新的视图模板user.tpl

c.TplName = "user.tpl"

}

九、编写view视图逻辑

这里编写一个新的视图模板, 代码如下:

文件: beegoProject/views/user.tpl

Demo

网站: {{.Website}}

{{ if .user }}

用户名: {{.user.Username}}

{{else}}

查找不到用户

{{ end }}

访问url: http://localhost:8080, 如果查询的用户存在,则显示用户名,否则显示查找不到用户。

提示: beego使用的是go自带的模板引擎,如果暂时看不懂,大家可以先忽略具体的模板语法,后续的教程会有讲解。

十、项目打包

项目完成后需要将代码打包发布到线上,这里依然推荐使用bee工具打包,bee工具可以一键将项目需要的相关文件一起打包成一个压缩包,只需要到线上解压即可。

下面是bee打包的例子, 首先将命令窗口的目录切换到 "项目根目录", 然后执行下面命令

bee pack

打包成功后再项目根目录下生成一个tizi365.tar.gz的压缩包,命名格式: ${项目名}.tar.gz

我们可以解压缩,看看压缩包包含什么内容:

beegoProject.tar.gz

├── conf - 配置文件存放目录,这里包含我们的配置文件

├── static - 静态资源目录,包含我们静态资源文件

├── views - 视图模板目录,包含模板文件

└── beegoProject - 这个就是我们的项目打包后的可执行程序,按我们项目命名

注意: 线上服务器一般都是linux环境,所以建议在linux环境打包项目,不要在windows环境打包,否则打包生成的可执行程序是.exe格式的,linux无法运行。

如果你不嫌麻烦,依然可以手动编译项目,然后将相关文件打包到一块

Copyright © 2088 2008世界杯_2026世界杯举办地 - mwllb.com All Rights Reserved.
友情链接