文章目录
一 Beego框架简述
beego简介
beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API、Web 及后端服务等各种应用,是一个 RESTful 的框架,主要设计灵感来源于 tornado、sinatra 和 flask 这三个框架,但是结合了 Go 本身的一些特性(interface、struct 嵌入等)而设计的一个框架。
beego 的架构
beego 的整体设计架构如下所示:
beego 是基于八大独立的模块构建的,是一个高度解耦的框架。
当初设计 beego 的时候就是考虑功能模块化,用户即使不使用 beego 的 HTTP 逻辑,也依旧可以使用这些独立模块。例如:你可以使用 cache
模块来做你的缓存逻辑;使用log
模块来记录你的操作信息;使用 config
模块来解析你各种格式的文件。所以 beego 不仅可以用于 HTTP 类的应用开发,在你的 socket 游戏开发中也是很有用的模块,这也是 beego 如此受欢迎的一个原因。大家如果玩过乐高的话,应该知道很多高级的东西都是一块一块的积木搭建出来的,而设计 beego 的时候,这些模块就是积木,高级机器人就是 beego。
beego 的执行逻辑
既然 beego 是基于这些模块构建的,那么它的执行逻辑是怎么样的呢?beego 是一个典型的 MVC
架构,它的执行逻辑如下图所示:
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
是入口文件。
二 第一个beego项目
安装包
go get github.com/beego/beego/v2
go get github.com/beego/bee/v2
创建项目
bee new pro01
需要将将二进制文件添加到或文件
bee
中的 PATH 环境变量中若$GOPATH/bin中无bee.exe则:
- 下载bee源码:
https://github.com/beego/be
- 将下载的文件解压到Go/src/github.com/beego/bee
- 编译安装
cd C:\Go\src\github.com\beego\bee
go build- 将生产的bee.exe拷贝到$GOPATH/bin
管理项目依赖
cd pro01
后打开终端:
go mod tidy
运行项目
bee run
运行结果:
______
| ___ \
| |_/ / ___ ___
| ___ \ / _ \ / _ \
| |_/ /| __/| __/
\____/ \___| \___| v2.0.4
2022/08/28 14:13:12 WARN ▶ 0001 Running application outside of GOPATH
2022/08/28 14:13:12 INFO ▶ 0002 Using 'pro01' as 'appname'
2022/08/28 14:13:12 INFO ▶ 0003 Initializing watcher...
github.com/beego/beego/v2
google.golang.org/protobuf/internal/flags
google.golang.org/protobuf/internal/fieldnum
google.golang.org/protobuf/internal/set
google.golang.org/protobuf/internal/genname
golang.org/x/sys/internal/unsafeheader
golang.org/x/mod/semver
google.golang.org/protobuf/internal/pragma
golang.org/x/text/transform
github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg
github.com/shiena/ansicolor
github.com/cespare/xxhash/v2
google.golang.org/protobuf/internal/detrand
github.com/mitchellh/mapstructure
google.golang.org/protobuf/internal/version
gopkg.in/yaml.v2
github.com/prometheus/common/model
golang.org/x/sys/windows
github.com/beego/beego/v2/core/utils
github.com/beego/beego/v2/server/web/grace
google.golang.org/protobuf/internal/errors
github.com/beego/beego/v2/core/logs
golang.org/x/crypto/acme
golang.org/x/text/unicode/bidi
golang.org/x/text/unicode/norm
google.golang.org/protobuf/encoding/protowire
github.com/beego/beego/v2/core/admin
github.com/beego/beego/v2/server/web/session
golang.org/x/tools/internal/event/label
golang.org/x/tools/go/internal/gcimporter
golang.org/x/tools/internal/typesinternal
google.golang.org/protobuf/reflect/protoreflect
golang.org/x/tools/internal/event/keys
github.com/beego/beego/v2/core/config
golang.org/x/text/secure/bidirule
golang.org/x/net/idna
golang.org/x/tools/internal/event/core
github.com/beego/beego/v2/server/web/context
google.golang.org/protobuf/internal/mapsort
google.golang.org/protobuf/internal/fieldsort
google.golang.org/protobuf/internal/strs
google.golang.org/protobuf/internal/descfmt
google.golang.org/protobuf/runtime/protoiface
google.golang.org/protobuf/reflect/protoregistry
google.golang.org/protobuf/internal/descopts
golang.org/x/tools/internal/event
golang.org/x/tools/go/gcexportdata
golang.org/x/tools/internal/gocommand
google.golang.org/protobuf/internal/encoding/text
google.golang.org/protobuf/internal/encoding/messageset
github.com/beego/beego/v2/server/web/context/param
golang.org/x/crypto/acme/autocert
golang.org/x/tools/internal/packagesinternal
golang.org/x/tools/go/internal/packagesdriver
google.golang.org/protobuf/proto
google.golang.org/protobuf/internal/encoding/defval
golang.org/x/tools/go/packages
google.golang.org/protobuf/encoding/prototext
google.golang.