
1,摘要
beego 是一個快速開發(fā) Go 應(yīng)用的 HTTP 框架,他可以用來快速開發(fā) API、Web 及后端服務(wù)等各種應(yīng)用,是一個 RESTful 的框架,主要設(shè)計靈感來源于 tornado、sinatra 和 flask 這三個框架,但是結(jié)合了 Go 本身的一些特性(interface、struct 嵌入等)而設(shè)計的一個框架。
本文作為BEEGO的導(dǎo)入學(xué)習(xí)文檔,在WINDOWS操作系統(tǒng)下實施以下內(nèi)容:
(1)BeeGO的框架介紹;
(2)BeeGO安裝和項目創(chuàng)建
(3)BeeGo 參數(shù)配置與路由配置
(4)beeGo 自己寫Controller 和 請求數(shù)據(jù)處理
2, 入門實踐
2.1 BeeGO框架介紹
2.1.1 beego 的整體設(shè)計架構(gòu)
beego 的整體設(shè)計架構(gòu)如下所示:

beego 是基于八大獨立的模塊構(gòu)建的,是一個高度解耦的框架。當(dāng)初設(shè)計 beego 的時候就是考慮功能模塊化,用戶即使不使用 beego 的 HTTP 邏輯,也依舊可以使用這些獨立模塊,例如:
你可以使用 cache 模塊來做你的緩存邏輯;
使用日志模塊來記錄你的操作信息;
使用 config 模塊來解析你各種格式的文件。
所以 beego 不僅可以用于 HTTP 類的應(yīng)用開發(fā),在你的 socket 游戲開發(fā)中也是很有用的模塊,這也是 beego 為什么受歡迎的一個原因。大家如果玩過樂高的話,應(yīng)該知道很多高級的東西都是一塊一塊的積木搭建出來的,而設(shè)計 beego 的時候,這些模塊就是積木,高級機器人就是 beego。
2.1.2 beego 的執(zhí)行邏輯
既然 beego 是基于這些模塊構(gòu)建的,那么它的執(zhí)行邏輯是怎么樣的呢?beego 是一個典型的 MVC 架構(gòu),它的執(zhí)行邏輯如下圖所示:

2.1.3 beego 項目結(jié)構(gòu)
一般的 beego 項目的目錄如下所示:
├── conf
│ └── app.conf
├── controllers
│ ├── admin
│ └── default.go
├── main.go
├── models
│ └── models.go
├── static
│ ├── css
│ ├── ico
│ ├── img
│ └── js
└── views
├── admin
└── index.tpl
從上面的目錄結(jié)構(gòu)我們可以看出來 M(models 目錄)、V(views 目錄)和 C(controllers 目錄)的結(jié)構(gòu), main.go 是入口文件。
2.2 BeeGO創(chuàng)建項目
2.2.1 bee 工具的安裝
可以通過如下的方式安裝 bee 工具:
go get github.com/beego/bee
安裝完之后,bee 可執(zhí)行文件默認(rèn)存放在$GOPATH/bin里面,所以您需要把$GOPATH/bin添加到您的環(huán)境變量中,才可以進行下一步。
如何添加環(huán)境變量,請自行搜索
例如,
輝哥在WINDOWS系統(tǒng)下,直接把GOBIN的目錄D:\jusanban\doc\50-編碼實現(xiàn)\GO\bin放置到Path變量中。
安裝好后,輸入在命令行輸入 bee,可以看到如下的信息就表示安裝成功。
D:\jusanban\doc\50-編碼實現(xiàn)\GO\src> bee
Bee is a Fast and Flexible tool for managing your Beego Web Application.
USAGE
bee command [arguments]
AVAILABLE COMMANDS
version Prints the current Bee version
migrate Runs database migrations
api Creates a Beego API application
bale Transforms non-Go files to Go source files
fix Fixes your application by making it compatible with newer versions of Beego
dlv Start a debugging session using Delve
dockerize Generates a Dockerfile for your Beego application
generate Source code generator
hprose Creates an RPC application based on Hprose and Beego frameworks
new Creates a Beego application
pack Compresses a Beego application into a single file
rs Run customized scripts
run Run the application by starting a local development server
server serving static content over HTTP on port
Use bee help [command] for more information about a command.
ADDITIONAL HELP TOPICS
Use bee help [topic] for more information about that topic.
2.2.2 創(chuàng)建項目目錄
安裝好以后兩個命令可用于創(chuàng)建項目目錄。我們需要注意的:
1) new命令,new命令是一個新建web項目的,我們在命令行下執(zhí)行 bee new 項目名稱就可以創(chuàng)建一個新的項目,但是注意該命令必須在 $GOPATH/src下執(zhí)行
2)api命令,上面的new命令用來創(chuàng)建web項目,不過很多用戶使用beego來開發(fā)api應(yīng)用,所以這個api命令就是用來創(chuàng)建API應(yīng)用的。
2.2.2.1 創(chuàng)建一個WEB項目
new 命令是新建一個 Web 項目,我們在命令行下執(zhí)行 bee new <項目名> 就可以創(chuàng)建一個新的項目。但是注意該命令必須在$GOPATH/src 下執(zhí)行。最后會在 $GOPATH/src 相應(yīng)目錄下生成如下目錄結(jié)構(gòu)的項目:
D:\jusanban\doc\50-編碼實現(xiàn)\GO\src> bee new myproject
______
| ___ \
| |_/ / ___ ___
| ___ \ / _ \ / _ \
| |_/ /| __/| __/
\____/ \___| \___| v1.10.0
2019/03/19 11:49:51 INFO ? 0001 Creating application...
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\myproject\
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\myproject\conf\
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\myproject\controllers\
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\myproject\models\
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\myproject\routers\
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\myproject\tests\
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\myproject\static\
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\myproject\static\js\
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\myproject\static\css\
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\myproject\static\img\
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\myproject\views\
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\myproject\conf\app.conf
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\myproject\controllers\default.go
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\myproject\views\index.tpl
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\myproject\routers\router.go
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\myproject\tests\default_test.go
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\myproject\main.go
2019/03/19 11:49:51 SUCCESS ? 0002 New application successfully created!
創(chuàng)建的目錄結(jié)構(gòu)如下:
myproject
├── conf
│ └── app.conf
├── controllers
│ └── default.go
├── main.go
├── models
├── routers
│ └── router.go
├── static
│ ├── css
│ ├── img
│ └── js
├── tests
│ └── default_test.go
└── views
└── index.tpl
8 directories, 4 files
2.2.2.2 創(chuàng)建一個API項目
上面的 new 命令是用來新建 Web 項目,不過很多用戶使用 beego 來開發(fā) API 應(yīng)用。所以這個 api 命令就是用來創(chuàng)建 API 應(yīng)用的,執(zhí)行命令之后如下所示:
D:\jusanban\doc\50-編碼實現(xiàn)\GO\src> bee api apiproject
______
| ___ \
| |_/ / ___ ___
| ___ \ / _ \ / _ \
| |_/ /| __/| __/
\____/ \___| \___| v1.10.0
2019/03/19 11:53:17 INFO ? 0001 Creating API...
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\apiproject
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\apiproject\conf
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\apiproject\controllers
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\apiproject\tests
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\apiproject\conf\app.conf
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\apiproject\models
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\apiproject\routers\
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\apiproject\controllers\object.go
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\apiproject\controllers\user.go
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\apiproject\tests\default_test.go
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\apiproject\routers\router.go
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\apiproject\models\object.go
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\apiproject\models\user.go
create D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\apiproject\main.go
2019/03/19 11:53:17 SUCCESS ? 0002 New API successfully created!
這個項目的目錄結(jié)構(gòu)如下:
apiproject
├── conf
│ └── app.conf
├── controllers
│ └── object.go
│ └── user.go
├── docs
│ └── doc.go
├── main.go
├── models
│ └── object.go
│ └── user.go
├── routers
│ └── router.go
└── tests
└── default_test.go
從上面的目錄我們可以看到和 Web 項目相比,少了 static 和 views 目錄,多了一個 test 模塊,用來做單元測試的。
同時,該命令還支持一些自定義參數(shù)自動連接數(shù)據(jù)庫創(chuàng)建相關(guān) model 和 controller:
bee api [appname] [-tables=""] [-driver=mysql] [-conn="root:<password>@tcp(127.0.0.1:3306)/test"]
如果 conn 參數(shù)為空則創(chuàng)建一個示例項目,否則將基于鏈接信息鏈接數(shù)據(jù)庫創(chuàng)建項目。
2.2.3 運行WEB項目
我們在開發(fā) Go 項目的時候最大的問題是經(jīng)常需要自己手動去編譯再運行,bee run 命令是監(jiān)控 beego 的項目,通過 fsnotify監(jiān)控文件系統(tǒng)。但是注意該命令必須在 $GOPATH/src/myproject 下執(zhí)行。
這樣我們在開發(fā)過程中就可以實時的看到項目修改之后的效果:
D:\jusanban\doc\50-編碼實現(xiàn)\GO\src\myproject> bee run
______
| ___ \
| |_/ / ___ ___
| ___ \ / _ \ / _ \
| |_/ /| __/| __/
\____/ \___| \___| v1.10.0
2019/03/19 11:56:40 INFO ? 0001 Using 'myproject' as 'appname'
2019/03/19 11:56:40 INFO ? 0002 Initializing watcher...
myproject/controllers
myproject/routers
myproject
2019/03/19 11:56:51 SUCCESS ? 0003 Built Successfully!
2019/03/19 11:56:51 INFO ? 0004 Restarting 'myproject.exe'...
2019/03/19 11:56:51 SUCCESS ? 0005 './myproject.exe' is running...
2019/03/19 11:56:54.696 [I] [asm_amd64.s:1337] http server Running on http://:8080
我們打開瀏覽器就可以看到效果 http://localhost:8080/:

如果我們修改了 Controller 下面的 default.go 文件,把EMAIL的地址改為
c.Data["Email"] = "duncanwang@gmail.com",我們就可以看到命令行輸出:
2019/03/19 12:01:19 SUCCESS ? 0006 Built Successfully!
2019/03/19 12:01:19 INFO ? 0007 Restarting 'myproject.exe'...
2019/03/19 12:01:19 SUCCESS ? 0008 './myproject.exe' is running...
2019/03/19 12:01:23.133 [I] [asm_amd64.s:1337] http server Running on http://:8080
3,參考
(1)BeeGo 介紹與項目的創(chuàng)建,啟動
https://www.cnblogs.com/liaojiafa/p/7806909.html
(2)BeeGo 參數(shù)配置與路由配置
https://www.cnblogs.com/liaojiafa/p/7806914.html
(3)beeGo 自己寫Controller 和 請求數(shù)據(jù)處理
https://www.cnblogs.com/liaojiafa/p/7806917.html
(4)beego手冊
https://beego.me/