一、beego 簡介
beego 是一個快速開發 Go 應用的 HTTP 框架,他可以用來快速開發 API、Web 及后端服務等各種應用,是一個 RESTful 的框架,主要設計靈感來源於 tornado、sinatra 和 flask 這三個框架,但是結合了 Go 本身的一些特性(interface、struct 嵌入等)而設計的一個框架。
官網地址如下: https://beego.me/
二、beego 的架構
beego 的整體設計架構如下所示:
beego 是基於八大獨立的模塊構建的,是一個高度解耦的框架。當初設計 beego 的時候就是考慮功能模塊化,用戶即使不使用 beego 的 HTTP 邏輯,也依舊可以使用這些獨立模塊,例如:你可以使用 cache 模塊來做你的緩存邏輯;使用日志模塊來記錄你的操作信息;使用 config 模塊來解析你各種格式的文件。所以 beego 不僅可以用於 HTTP 類的應用開發,在你的 socket 游戲開發中也是很有用的模塊,這也是 beego 為什么受歡迎的一個原因。大家如果玩過樂高的話,應該知道很多高級的東西都是一塊一塊的積木搭建出來的,而設計 beego 的時候,這些模塊就是積木,高級機器人就是 beego。至於這些模塊的功能以及如何使用會在后面的文檔逐一介紹。
三、beego 的執行邏輯
既然 beego 是基於這些模塊構建的,那么它的執行邏輯是怎么樣的呢?beego 是一個典型的 MVC 架構,它的執行邏輯如下圖所示:
四、beego 項目結構
一般的 beego 項目的目錄如下所示:
myproject ├── conf │ └── app.conf ├── controllers │ └── default.go ├── main.go ├── models ├── routers │ └── router.go ├── static │ ├── css │ ├── img │ └── js ├── tests │ └── default_test.go └── views └── index.tpl
從上面的目錄結構我們可以看出來 M(models 目錄)、V(views 目錄)和 C(controllers 目錄)的結構, main.go
是入口文件。
五、創建工程及運行項目
1. 安裝 beego
go get github.com/astaxie/beego
2. 創建項目目錄
創建項目目錄我們可以使用bee這個工具,bee 工具是一個為了協助快速開發 beego 項目而創建的項目,通過 bee 您可以很容易的進行 beego 項目的創建、熱編譯、開發、測試、和部署。
go get github.com/beego/bee
安裝完之后,bee
可執行文件默認存放在 $GOPATH/bin
里面,為了方便使用 bee,將 bee 的可執行文件路徑添加到環境變量中。也就是把 $GOPATH/bin
添加到您的環境變量中,完成之后我們在命令行中執行下面命令,可以看到 bee 的參數:
F:\Go\project\src\go_dev\GoProject\GoWeb>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 versio ns 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.
下來重點看幾個命令:
- new 命令
new 命令是新建一個 Web 項目,我們在命令行下執行 bee new <項目名> 就可以創建一個新的項目。默認項目是創建在$GOPATH/src/下,如果進入到該目錄下則可以將創建的項目隨意放置位置。下來我們創建一個myproject 的項目:
F:\Go\project\src\go_dev\GoProject\GoWeb>bee new myproject ______ | ___ \ | |_/ / ___ ___ | ___ \ / _ \ / _ \ | |_/ /| __/| __/ \____/ \___| \___| v1.10.0 2019/03/19 22:03:00 INFO ▶ 0001 Creating application... create F:\Go\project\src\go_dev\GoProject\GoWeb\myproject\ create F:\Go\project\src\go_dev\GoProject\GoWeb\myproject\conf\ create F:\Go\project\src\go_dev\GoProject\GoWeb\myproject\controllers\ create F:\Go\project\src\go_dev\GoProject\GoWeb\myproject\models\ create F:\Go\project\src\go_dev\GoProject\GoWeb\myproject\routers\ create F:\Go\project\src\go_dev\GoProject\GoWeb\myproject\tests\ create F:\Go\project\src\go_dev\GoProject\GoWeb\myproject\static\ create F:\Go\project\src\go_dev\GoProject\GoWeb\myproject\static\js\ create F:\Go\project\src\go_dev\GoProject\GoWeb\myproject\static\css\ create F:\Go\project\src\go_dev\GoProject\GoWeb\myproject\static\img\ create F:\Go\project\src\go_dev\GoProject\GoWeb\myproject\views\ create F:\Go\project\src\go_dev\GoProject\GoWeb\myproject\conf\app.con f create F:\Go\project\src\go_dev\GoProject\GoWeb\myproject\controllers\ default.go create F:\Go\project\src\go_dev\GoProject\GoWeb\myproject\views\index. tpl create F:\Go\project\src\go_dev\GoProject\GoWeb\myproject\routers\rout er.go create F:\Go\project\src\go_dev\GoProject\GoWeb\myproject\tests\defaul t_test.go create F:\Go\project\src\go_dev\GoProject\GoWeb\myproject\main.go 2019/03/19 22:03:01 SUCCESS ▶ 0002 New application successfully created!
- api 命令
上面的 new 命令是用來新建 Web 項目,不過很多用戶使用 beego 來開發 API 應用。所以這個 api 命令就是用來創建 API 應用的,執行命令之后如下所示:
F:\Go\project\src\go_dev\GoProject\GoWeb>bee api apiproject ______ | ___ \ | |_/ / ___ ___ | ___ \ / _ \ / _ \ | |_/ /| __/| __/ \____/ \___| \___| v1.10.0 2019/03/19 22:25:43 INFO ▶ 0001 Creating API... create F:\Go\project\src\go_dev\GoProject\GoWeb\apiproject create F:\Go\project\src\go_dev\GoProject\GoWeb\apiproject\conf create F:\Go\project\src\go_dev\GoProject\GoWeb\apiproject\controllers create F:\Go\project\src\go_dev\GoProject\GoWeb\apiproject\tests create F:\Go\project\src\go_dev\GoProject\GoWeb\apiproject\conf\app.co nf create F:\Go\project\src\go_dev\GoProject\GoWeb\apiproject\models create F:\Go\project\src\go_dev\GoProject\GoWeb\apiproject\routers\ create F:\Go\project\src\go_dev\GoProject\GoWeb\apiproject\controllers \object.go create F:\Go\project\src\go_dev\GoProject\GoWeb\apiproject\controllers \user.go create F:\Go\project\src\go_dev\GoProject\GoWeb\apiproject\tests\defau lt_test.go create F:\Go\project\src\go_dev\GoProject\GoWeb\apiproject\routers\rou ter.go create F:\Go\project\src\go_dev\GoProject\GoWeb\apiproject\models\obje ct.go create F:\Go\project\src\go_dev\GoProject\GoWeb\apiproject\models\user .go create F:\Go\project\src\go_dev\GoProject\GoWeb\apiproject\main.go 2019/03/19 22:25:43 SUCCESS ▶ 0002 New API successfully created!
可以看出兩個項目在目錄結構上的差別:
從上面的目錄我們可以看到和 Web 項目相比,少了 static 和 views 目錄,多了一個 test 模塊,用來做單元測試的。同時,該命令還支持一些自定義參數自動連接數據庫創建相關 model 和 controller:
bee api [appname] [-tables=""] [-driver=mysql] [-conn="root:<password>@tcp(127.0.0.1:3306)/test"],如果 conn 參數為空則創建一個示例項目,否則將基於鏈接信息鏈接數據庫創建項目。
- run 命令
我們在開發 Go 項目的時候最大的問題是經常需要自己手動去編譯再運行,bee run 命令是監控 beego 的項目,通過 fsnotify 監控文件系統(但是注意該命令必須在 $GOPATH/src/appname 下執行),當文件發生變化時他會熱加載編譯文件。
我們從命令行進入到項目目錄下執行 bee run,會自動編譯並執行該項目(編譯完成會在項目根目錄下生成一個 項目名.exe可執行文件):
F:\Go\project\src\go_dev\GoProject\GoWeb\myproject>bee run ______ | ___ \ | |_/ / ___ ___ | ___ \ / _ \ / _ \ | |_/ /| __/| __/ \____/ \___| \___| v1.10.0 2019/03/19 22:38:44 INFO ▶ 0001 Using 'myproject' as 'appname' 2019/03/19 22:38:44 INFO ▶ 0002 Initializing watcher... go_dev/GoProject/GoWeb/myproject/controllers go_dev/GoProject/GoWeb/myproject/routers go_dev/GoProject/GoWeb/myproject 2019/03/19 22:39:32 SUCCESS ▶ 0003 Built Successfully! 2019/03/19 22:39:32 INFO ▶ 0004 Restarting 'myproject.exe'... 2019/03/19 22:39:32 SUCCESS ▶ 0005 './myproject.exe' is running...
此時打開瀏覽器,輸入 http://localhost:8080/ 會出現下面畫面:
bee的更多命令可以看 GO的官方文檔:https://beego.me/docs/install/bee.md#api-%E5%91%BD%E4%BB%A4
六、參考文獻
- https://beego.me/docs/intro/