【Go服务器】Beego:第一个beego golang项目

1,074 阅读3分钟

beego简介

beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API、Web 及后端服务等各种应用,是一个 RESTful 的框架,主要设计灵感来源于 tornado、sinatra 和 flask 这三个框架,但是结合了 Go 本身的一些特性(interface、struct 嵌入等)而设计的一个框架。

img

beego的设计就是一种搭积木的思维,就是模块化构建,是一个高度解耦的框架。在使用模块化开发时,即使你不懂beego的http逻辑,依旧可以使用这些独立模块。例如:你可以使用 cache 模块来做你的缓存逻辑;使用日志模块来记录你的操作信息;使用 config 模块来解析你各种格式的文件。所以 beego 不仅可以用于 HTTP 类的应用开发,在你的 socket 游戏开发中也是很有用的模块,这也是 beego 为什么受欢迎的一个原因。

beego的执行逻辑

beego 是一个典型的 MVC 架构,他的执行逻辑如下图所示:

img

beego的安装

1.安装bee工具

//用于安装bee工具
go get github.com/beego/bee/v2

可能出现的问题:

$go get github.com/beego/bee
go get: module github.com/beego/bee: Get "https://proxy.golang.org/github.com/beego/bee/@v/list": dial tcp 216.58.200.49:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

这是因为此时的环境设置的golang的镜像路径是官方路径:set GOSUMDB=sum.golang.org,在使用过程中又慢又容易出错。

因此可以先看下环境的配置是否切换,先go env 看 GOSUMDB 的配置,将其进行关闭:

go env -w GOSUMDB=off

而后将代理设置为国内的镜像,用go mod 快,不用翻墙。

$go get github.com/beego/bee/v2

配置环境:

Windows10的配置部署是:此电脑->属性->高级系统设置->环境变量

golang_env

查看bee的版本。

$bee version
______
| ___ \
| |_/ /  ___   ___
| ___ \ / _ \ / _ \
| |_/ /|  __/|  __/
\____/  \___| \___| v2.0.2

├── Beego     : Beego is not installed. Please do consider installing it first: https://github.com/beego/beego/v2. If you are using go mod, and you don't install the beego under $GOPATH/src/github.com/astaxie, just ignore this.
├── GoVersion : go1.16.2
├── GOOS      : windows
├── GOARCH    : amd64
├── NumCPU    : 4
├── GOPATH    : C:\Users\liu\go
├── GOROOT    : D:\environment\go
├── Compiler  : gc
└── Date      : Saturday, 27 Mar 2021

创建项目

beego 的项目基本都是通过 bee 命令来创建的,所以在创建项目之前确保你已经安装了 bee 工具和 beego。如果你还没有安装,那么请查阅 beego 的安装 和 bee 工具的安装。 现在一切就绪我们就可以开始创建项目了,打开终端,进入 $GOPATH/src 所在的目录:

$bee new bee_01
2021/03/27 12:33:23 INFO     ▶ 0001 generate new project support go modules.
2021/03/27 12:33:23 INFO     ▶ 0002 Creating application...
        create   D:\golang\bee_01\go.mod
        create   D:\golang\bee_01\
        create   D:\golang\bee_01\conf\
        create   D:\golang\bee_01\controllers\
        create   D:\golang\bee_01\models\
        create   D:\golang\bee_01\routers\
        create   D:\golang\bee_01\tests\
        create   D:\golang\bee_01\static\
        create   D:\golang\bee_01\static\js\
        create   D:\golang\bee_01\static\css\
        create   D:\golang\bee_01\static\img\
        create   D:\golang\bee_01\views\
        create   D:\golang\bee_01\conf\app.conf
        create   D:\golang\bee_01\controllers\default.go
        create   D:\golang\bee_01\views\index.tpl
        create   D:\golang\bee_01\routers\router.go
        create   D:\golang\bee_01\tests\default_test.go
        create   D:\golang\bee_01\main.go
2021/03/27 12:33:23 SUCCESS  ▶ 0003 New application successfully created!

安装相关插件:

go mod download github.com/beego/beego/v2
go get github.com/beego/beego/v2/server/web@v2.0.1
bee api bee_01 //api 命令

我们在开发 Go 项目的时候最大的问题是经常需要自己手动去编译再运行,bee run 命令是监控 beego 的项目,通过 fsnotify 监控文件系统。这样我们在开发过程中就可以实时的看到项目修改之后的效果:

bee run
______
| ___ \
| |_/ /  ___   ___
| ___ \ / _ \ / _ \
| |_/ /|  __/|  __/
\____/  \___| \___| v2.0.2
2021/03/27 12:39:58 WARN     ▶ 0001 Running application outside of GOPATH
2021/03/27 12:39:58 INFO     ▶ 0002 Using 'bee_01' as 'appname'
2021/03/27 12:39:58 INFO     ▶ 0003 Initializing watcher...
bee_01/controllers
bee_01/routers
bee_01
2021/03/27 12:40:01 SUCCESS  ▶ 0004 Built Successfully!
2021/03/27 12:40:01 INFO     ▶ 0005 Restarting 'bee_01.exe'...
2021/03/27 12:40:01 SUCCESS  ▶ 0006 './bee_01.exe' is running...
2021/03/27 12:40:03.234 [I] [parser.go:413]  generate router from comments

2021/03/27 12:40:03.249 [I] [server.go:241]  http server Running on http://:8080

2021/03/27 12:40:30.947 [D] [router.go:955]  |            ::1| 200 |     2.5006ms|   match| GET      /     r:/

2021/03/27 12:40:31.062 [D] [router.go:955]  |            ::1| 200 |      931.3µs|   match| GET      /static/js/reload.min.js

在浏览器点开测试:

image.png

ok。