Beego之Beego简介和安装

news2024/11/15 23:54:30

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

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

在这里插入图片描述

后台信息打印:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1141333.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

释放搜索潜力:基于ES(ElasticSearch)打造高效的语义搜索系统,让信息尽在掌握[1.安装部署篇],支持Linux/Windows部署安装

搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术…

Spring Authorization Server 1.1 扩展实现 OAuth2 密码模式与 Spring Cloud 的整合实战

目录 前言无图无真相创建数据库授权服务器maven 依赖application.yml授权服务器配置AuthorizationServierConfigDefaultSecutiryConfig 密码模式扩展PasswordAuthenticationTokenPasswordAuthenticationConverterPasswordAuthenticationProvider JWT 自定义字段自定义认证响应认…

Python —— UI自动化用例前置处理日志封装

1、UI自动化用例增加前置 1、fixture(夹具)的使用 前置顾名思义是在执行测试用例之前做的一些事情,在自动化测试时会碰到用例执行前需要做一些前置操作,以及用例执行后需要做一些后置操作,比如登录、退出等&#xff…

Redis(04)| 数据结构-压缩列表

压缩列表的最大特点,就是它被设计成一种内存紧凑型的数据结构,占用一块连续的内存空间,不仅可以利用 CPU 缓存,而且会针对不同长度的数据,进行相应编码,这种方法可以有效地节省内存开销。 但是,…

如何绘制【逻辑回归】中threshold参数的学习曲线

threshold参数的意义是通过筛选掉低于threshold的参数,来对逻辑回归的特征进行降维。 首先导入相应的模块: from sklearn.linear_model import LogisticRegression as LR from sklearn.datasets import load_breast_cancer from sklearn.model_selecti…

docker应用部署---nginx部署的配置

1. 搜索nginx镜像 docker search nginx2. 拉取nginx镜像 docker pull nginx3. 创建容器,设置端口映射、目录映射 # 在/root目录下创建nginx目录用于存储nginx数据信息 mkdir ~/nginx cd ~/nginx mkdir conf cd conf# 在~/nginx/conf/下创建nginx.conf文件,粘贴下…

在windows服务器上部署一个单机项目以及前后端分离项目

目录 一. 单机项目在windows服务器上的部署 1.1 在本机上测试项目无误 1.1.1 在数据库中测试sql文件没问题 1.1.2 在tomcat中测试war文件无误 1.1.3 测试完成后,进入浏览器运行单机项目确保无误 1.2 在windows服务器中运行项目 二. 前后端分离项目在服务器上…

使用GHS和Renesas E2调试RH850 1372

文章目录 前言工程配置工程调试总结 前言 RH850系列和其他芯片一样,除了Lauterbach,Isystem之外,也有便宜的刷写/调试器,如E2,E1。本文介绍利用E2调试器,联合GreenHills编译器对1372芯片调试 工程配置 在开始调试之前&#xff…

【Java 进阶篇】Java Request 获取请求行数据详解

在Java Web开发中,获取HTTP请求的请求行数据是一个常见的任务。HTTP请求的请求行包含了一些重要的信息,如请求方法、请求URL和HTTP协议版本。在Java中,可以使用HttpServletRequest对象来获取请求行数据。本文将详细解释如何使用Java获取HTTP请…

1-多媒体通信概述

文章目录 媒体和多媒体媒体多媒体VarityIntergrationInteraction 多媒体通信(MMC)业务类型 MMC主要问题和关键技术主要问题关键技术 MMC发展动向重要事件趋势 标准化组织 媒体和多媒体 媒体 承载信息的载体. 感知媒体, 表示媒体, 显示媒体, 存储媒体, 传输媒体. 多媒体 Var…

重庆开放大学学子们的好帮手

作为一名电大学员,我有幸目睹了一个令人惊叹的学习工具的诞生——电大搜题微信公众号。这个创新应用为重庆开放大学(广播电视大学)的学子们提供了便捷、高效的学习资源,成为他们的得力助手。 重庆开放大学是一所为全日制在职人员提…

番外8.2 --- 后续

### 01:dd命令:在新挂载点创建swap文件大小10MB;(dd if/dev/zero of/swap bs1024 count10240) 02:给swap建立文件系统,将其分属到swap文件(mkswap /swap; swapon /swap &…

【算法|动态规划No30】leetcode5. 最长回文子串

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

2015款路虎揽胜车行驶中发动机偶尔自动熄火怎么办

一、故障现象 一辆2015款路虎揽胜车,搭载V6机械增压发动机,累计行驶里程约为18万km。车主反映,行驶中发动机偶尔自动熄火,故障频率较低,大概半个月出现一次。 二、故障诊断 接车后路试,故障未能再现。用故障…

微信小程序如何利用接口返回经纬计算实际位置并且进行导航功能【下】

如果要在微信小程序内部导航的话可以使用wx.navigateToMiniProgram方法来打开腾讯地图小程序,并传递目的地的经纬度信息。 目录 1.如何获取高精地址 2.如何调起地图 3.实现效果 navigateToDestination: function() {let that this;var latitude parseFloa…

1. 两数之和、Leetcode的Python实现

博客主页:🏆看看是李XX还是李歘歘 🏆 🌺每天分享一些包括但不限于计算机基础、算法等相关的知识点🌺 💗点关注不迷路,总有一些📖知识点📖是你想要的💗 ⛽️今…

Qwt QwtLegend和QwtPlotLegendItem图例类详解

1.概述 QwtLegend类是Qwt绘图库中用于显示图例的类。图例用于标识不同曲线、绘图元素或数据的意义,以便用户能够更好地理解图表中的数据。通过QwtLegend类,可以方便地在图表中添加、删除和设置图例的位置、方向和样式等属性。 QwtPlotLegendItem类是Qwt…

算法训练营第三天 | 203.移除链表元素、707.设计链表 、206.反转链表

关于链表我们应该了解什么: 代码随想录 在实际开发中,遇到指针我们要做好防御性编程。 问题( 一 ) 题目描述 : 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点…

H5营销观察:H5破圈传播有什么秘诀

在移动互联网时代,流量越加碎片化,场景变得相对短促和兴趣导向,一个营销H5产生的每一次点击、每一次互动、每一次流量停留背后都会有相应的动机,也是营销流量效果的成因。 今天,我们一起来探究下什么样的内容更容易传播…

calcite 校验层总结

1、校验的作用 1)完善语义信息 例如在SQL语句中,如果碰到select * 这样的指令,在SQL的语义当中,“*” 指的是取出对应数据源中所有字段的信息,因此就需要根据元数据信息来展开。 2)结合元数据信息来纠偏…