Beego之Beego简介和安装

1、beego简介

1.1 Beego简介

Beego是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API、Web 及后端服务等各种应用,是一个

RESTful 的框架,主要设计灵感来源于tornado、sinatra和 flask 这三个框架,但是结合了 Go 本身的一些特性

(interface、struct 嵌入等)而设计的一个框架。支持如下特性:

  • MVC
  • REST
  • 智能路由
  • 日志调试
  • 配置管理
  • 模板自动渲染
  • layout 设计
  • 中间件插入逻辑
  • 方便的 JSON/XML 服务

Beego 目前我们是朝着一种支持中小企业为主,以提高工作效率为主要目标的框架。

1.2 Beego的架构

Beego的整体设计架构如下所示:

架构图1:

Beego之Beego简介和安装_第1张图片

架构图2:

Beego之Beego简介和安装_第2张图片

Beego 是基于八大独立的模块构建的,是一个高度解耦的框架。当初设计 Beego 的时候就是考虑功能模块化,用

户即使不使用 Beego 的 HTTP 逻辑,也依旧可以使用这些独立模块,例如:你可以使用 cache 模块来做你的缓存

逻辑;使用日志模块来记录你的操作信息;使用 config 模块来解析你各种格式的文件。所以 Beego 不仅可以用于

HTTP 类的应用开发,在你的 socket 游戏开发中也是很有用的模块,这也是 Beego 为什么受欢迎的一个原因。

1.3 Beego的执行逻辑

既然 Beego 是基于这些模块构建的,那么它的执行逻辑是怎么样的呢?beego 是一个典型的 MVC 架构,它的执

行逻辑如下图所示:

Beego之Beego简介和安装_第3张图片

1.4 Beego项目结构

一般的Beego项目的目录如下所示:

├── conf
│   └── app.conf
├── controllers
│   ├── admin
│   └── default.go
├── main.go
├── models
│   └── models.go
├── static
│   ├── css
│   ├── ico
│   ├── img
│   └── js
└── views
    ├── admin
    └── index.tpl

从上面的目录结构我们可以看出来 M(models 目录)、V(views 目录)和 C(controllers 目录)的结构,

main.go 是入口文件。

你可以通过 bee 工具来新建项目。

1.5 Beego相关文档和参考

Beego地址:https://github.com/beego/beego

Beego中文文档:https://beego.gocn.vip/beego/zh/

Beego官方文档:https://github.com/beego/beedoc

Beego开发手册:https://www.bookstack.cn/read/beego/

Beego v2.0 开发手册:https://www.bookstack.cn/read/beego-2.0-zh/

Beego Example:https://github.com/beego/beego-example

Beego Web:https://github.com/beego/beeweb

beego框架教程:http://www.codebaoku.com/beego/beego-index.html

2、Beego安装

2.1 安装前提

Beego 依赖于 go 开发环境,并且在当前版本,Beego依赖于go mod特性。

安装 go 环境可以参考前面的文章,这里必须保证go环境的正常使用和相关环境变量都已经正常配置。

这里保证 GO 版本在 1.16 之上,本文使用的是1.18.4

在 Beego 应用的开发过程中,我们会需要用到一些命令:

  • go mod 命令
  • go get 命令
  • go install 命令

同时强烈建议使用相关的配套工具bee

请注意,在Beego V2 之后,我们要求使用go mod特性,请务必确保开启了go mod特性,即设置了

GO111MODULE=on。同时,如果你是在中国大陆境内,我们建议你同时设置GORPOXY

Go语言GOPROXY设置

1、首先开启go module

go env -w GO111MODULE=on     // Windows  
export GO111MODULE=on        // Linux

2、配置goproxy

阿里配置:

go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct       // Windows  
export GOPROXY=https://mirrors.aliyun.com/goproxy/,direct          // Linux

七牛云配置:

go env -w GOPROXY=https://goproxy.cn,direct      // Windows  
export GOPROXY=https://goproxy.cn,direct         // Linux

注意:

Go 1.13设置了默认的GOSUMDB= sum.golang.org,是用来验证包的有效性。这个网址由于墙的原因可能无法

访问,所以可以使用下面命令来关闭:

go env -w GOSUMDB=off // Windows  
export GOSUMDB=off // Linux

2.2 Linux or Windows下安装

Beego从2013年发布beego 1.0.0,到目前最新的版本为beego 2.0.x

Beego的安装只需要执行下面的命令安装Bee

$ go install github.com/beego/bee/v2@latest

执行完go install之后会在$GOBIN目录下生成bee/bee.exe可执行程序。

# Linux下
[root@zsx ~]# ls $GOBIN
bee  go          gofmt   grpcurl        protoc-gen-govalidators  protoc-gen-swagger
dlv  go-bindata  grpcui  protoc-gen-go  protoc-gen-grpc-gateway
# Windows下
C:\Users\zhangshixing>dir %GOBIN%

查看版本:

[root@zsx ~]# bee version
2023/02/18 17:18:06.650 [D]  init global config instance failed. If you do not use this, just ignore it.  open conf/app.conf: no such file or directory
______
| ___ \
| |_/ /  ___   ___
| ___ \ / _ \ / _ \
| |_/ /|  __/|  __/
\____/  \___| \___| v2.0.4

├── GoVersion : go1.18.4
├── GOOS      : linux
├── GOARCH    : amd64
├── NumCPU    : 1
├── GOPATH    : /home/zhangshixing/go_work_space
├── GOROOT    : /home/zhangshixing/go
├── Compiler  : gc
└── Date      : Saturday, 18 Feb 2023

接下来,我们来尝试启动一个hello world的例子。在这个例子里面,我们将使用Bee工具来创建hello world

项目。

2.3 创建项目

执行创建项目的命令:

[root@zsx src]# bee new hello
2023/02/18 17:26:05.053 [D]  init global config instance failed. If you do not use this, just ignore it.  open conf/app.conf: no such file or directory
2023/02/18 17:26:05 INFO     ▶ 0001 Generate new project support go modules.
2023/02/18 17:26:05 INFO     ▶ 0002 Creating application...
        create   /home/zhangshixing/go_work_space/src/hello/go.mod
        create   /home/zhangshixing/go_work_space/src/hello/
        create   /home/zhangshixing/go_work_space/src/hello/conf/
        create   /home/zhangshixing/go_work_space/src/hello/controllers/
        create   /home/zhangshixing/go_work_space/src/hello/models/
        create   /home/zhangshixing/go_work_space/src/hello/routers/
        create   /home/zhangshixing/go_work_space/src/hello/tests/
        create   /home/zhangshixing/go_work_space/src/hello/static/
        create   /home/zhangshixing/go_work_space/src/hello/static/js/
        create   /home/zhangshixing/go_work_space/src/hello/static/css/
        create   /home/zhangshixing/go_work_space/src/hello/static/img/
        create   /home/zhangshixing/go_work_space/src/hello/views/
        create   /home/zhangshixing/go_work_space/src/hello/conf/app.conf
        create   /home/zhangshixing/go_work_space/src/hello/controllers/default.go
        create   /home/zhangshixing/go_work_space/src/hello/views/index.tpl
        create   /home/zhangshixing/go_work_space/src/hello/routers/router.go
        create   /home/zhangshixing/go_work_space/src/hello/tests/default_test.go
        create   /home/zhangshixing/go_work_space/src/hello/main.go
2023/02/18 17:26:05 SUCCESS  ▶ 0003 New application successfully created!

这会在当前目录下创建一个名叫hello的文件夹,该文件夹的目录结构如下。

[root@zsx src]# tree hello/
hello/
├── conf
│   └── app.conf
├── controllers
│   └── default.go
├── go.mod
├── main.go
├── models
├── routers
│   └── router.go
├── static
│   ├── css
│   ├── img
│   └── js
│       └── reload.min.js
├── tests
│   └── default_test.go
└── views
    └── index.tpl

10 directories, 8 files

而后进入文件夹:

[root@zsx src]# cd hello/

而后我们执行go mod tidy命令,来生成go.sum文件。

[root@zsx hello]# go mod tidy
go: downloading github.com/beego/beego/v2 v2.0.1
go: downloading github.com/prometheus/client_golang v1.7.0
go: downloading golang.org/x/tools v0.0.0-20201211185031-d93e913c1a58
go: downloading github.com/elazarl/go-bindata-assetfs v1.0.0
go: downloading github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d
go: downloading github.com/mitchellh/mapstructure v1.3.3
go: downloading gopkg.in/yaml.v2 v2.2.8
go: downloading github.com/prometheus/common v0.10.0
go: downloading github.com/prometheus/procfs v0.1.3
go: downloading golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f
go: downloading golang.org/x/mod v0.3.0
go: downloading google.golang.org/protobuf v1.23.0

该命令会生成GOPATH/pkg目录,并且下载相应的依赖包。

而后,我们尝试启动,如果没有错误的话,你会看到类似的输出:

[root@zsx hello]# bee run
______
| ___ \
| |_/ /  ___   ___
| ___ \ / _ \ / _ \
| |_/ /|  __/|  __/
\____/  \___| \___| v2.0.4
2023/02/18 17:33:02 INFO     ▶ 0001 Using 'hello' as 'appname'
2023/02/18 17:33:02 INFO     ▶ 0002 Initializing watcher...
github.com/beego/beego/v2
github.com/beego/beego/v2/core/utils
github.com/beego/beego/v2/core/admin
......
golang.org/x/tools/go/packages
github.com/beego/beego/v2/server/web
hello/controllers
hello/routers
hello
2023/02/18 17:33:18 SUCCESS  ▶ 0003 Built Successfully!
2023/02/18 17:33:18 INFO     ▶ 0004 Restarting 'hello'...
2023/02/18 17:33:18 SUCCESS  ▶ 0005 './hello' is running...
2023/02/18 17:33:20.659 [I] [parser.go:413]  generate router from comments

2023/02/18 17:33:20.659 [I] [server.go:241]  http server Running on http://:8080

如果你启动不成功,请先确认自己的 8080 端口是否被占用了。

访问http://localhost:8080

Beego之Beego简介和安装_第4张图片

后台信息打印:

......
2023/02/18 17:36:15.322 [D] [router.go:955]  |      127.0.0.1| 200 |   2.349161ms|   match| GET      /     r:/

2023/02/18 17:36:15.543 [D] [router.go:955]  |      127.0.0.1| 200 |     31.328µs|   match| GET      /static/js/reload.min.js
......

这个项目的整体工作流程:

1、首先我们导入了包 github.com/beego/beego/v2/server/web。我们知道 Go 语言里面被导入的包会按照深

度优先的顺序去执行导入包的初始化(变量和 init 函数),beego 包中会初始化一个 BeeAPP 的应用和一些参

数。

2、定义 Controller,这里我们定义了一个 struct 为 MainController,充分利用了 Go 语言的组合的概念,匿名

包含了 web.Controller,这样我们的 MainController 就拥有了 web.Controller 的所有方法。

3、定义 RESTful 方法,通过匿名组合之后,其实目前的 MainController 已经拥有了 GetPostDelete

Put 等方法,这些方法是分别用来对应用户请求的 Method 函数,如果用户发起的是 POST 请求,那么就执行

Post 函数。所以这里我们定义了 MainControllerGet 方法用来重写继承的 Get 函数,这样当用户发起

GET 请求的时候就会执行该函数。

4、定义 main 函数,所有的 Go 应用程序和 C 语言一样都是 main 函数作为入口,所以我们这里定义了我们应用

的入口。

5、Router 注册路由,路由就是告诉 beego,当用户来请求的时候,该如何去调用相应的 Controller,这里我们

注册了请求 / 的时候,请求到 MainController。这里我们需要知道,Router 函数的两个参数函数,第一个是

路径,第二个是 Controller 的指针。

6、Run 应用,最后一步就是把在步骤 1 中初始化的 BeeApp 开启起来,其实就是内部监听了 8080 端口:Go 默

认情况会监听你本机所有的 IP 上面的 8080 端口。

你可能感兴趣的:(beego,beego)