• 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:

    在这里插入图片描述

    架构图2:

    在这里插入图片描述

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

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

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

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

    1.3 Beego的执行逻辑

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

    行逻辑如下图所示:

    在这里插入图片描述

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    从上面的目录结构我们可以看出来 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
    
    • 1
    • 2

    2、配置goproxy

    阿里配置:

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

    七牛云配置:

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

    注意:

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

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

    go env -w GOSUMDB=off // Windows  
    export GOSUMDB=off // Linux
    
    • 1
    • 2

    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
    
    • 1

    执行完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%
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    查看版本:

    [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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    接下来,我们来尝试启动一个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!
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    这会在当前目录下创建一个名叫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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    而后进入文件夹:

    [root@zsx src]# cd hello/
    
    • 1

    而后我们执行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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    该命令会生成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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

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

    访问http://localhost:8080

    在这里插入图片描述

    后台信息打印:

    ......
    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
    • 2
    • 3
    • 4
    • 5

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

    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 端口。

  • 相关阅读:
    6个赚钱法则,后悔知道晚了,赚钱是为了需要时说可以而不是考虑下
    nacos 源码阅读 发布订阅模式
    xen-gic初始化流程
    IP-guard Web系统远程命令执行漏洞说明
    源代码加密、源代码防泄漏c/c++与git服务器开发环境
    山东专升本计算机考试要求
    Docker 镜像全军覆没后,如何给Ubuntu手动安装 docker 服务
    【算法专题--链表】两两交换链表中的节点 -- 高频面试题(图文详解,小白一看就懂!!!)
    魏副业而战:做闲鱼比打工强
    uni-app ——uni-app的基本使用
  • 原文地址:https://blog.csdn.net/qq_30614345/article/details/134022368