(二)Beego框架bee工具
一、bee工具的簡介
bee工具是一個為了協助快速開發beego專案而建立的專案,通過bee您可以很容易的進行beego專案的建立、熱編譯、開發、測試和部署。
1.1 工具安裝
go get -u github.com/beego/bee/v2
安裝完之後, bee 可執行檔案預設存放在 $GOPATH/bin 裡面,所以您需要把$GOPATH/bin 新增到您的環境變數中,才可以進行下一步。
如何新增環境變數,請自行搜尋 如果你本機設定了 GOBIN ,那麼上面的命令就會安裝到GOBIN 下,請新增 GOBIN 到你的環境變數中
二、bee工具命令詳解
我們在命令列輸入bee,可以看到如下的資訊:
Bee is a Fast and Flexible tool for managing your Beego Web Application. You are using bee for beego v2.x. If you are working on beego v1.x, please downgrade version to bee v1.12.0 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 pro Source code generator dev Commands which used to help to develop beego and bee 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 update Update Bee Use bee help [command] for more information about a command.
2.1 new命令
new 命令是新建一個 Web 專案,我們在命令列下執行 bee new <專案名> 就可以建立一個新的專案。但是注意該命令必須在 $GOPATH/src 下執行。最後會在 $GOPATH/src 相應目錄下生成如下目錄結構的專案:
# bee new myproject [INFO] Creating application... /gopath/src/myproject/ /gopath/src/myproject/conf/ /gopath/src/myproject/controllers/ /gopath/src/myproject/models/ /gopath/src/myproject/static/ /gopath/src/myproject/static/js/ /gopath/src/myproject/static/css/ /gopath/src/myproject/static/img/ /gopath/src/myproject/views/ /gopath/src/myproject/conf/app.conf /gopath/src/myproject/controllers/default.go /gopath/src/myproject/views/index.tpl /gopath/src/myproject/main.go 13-11-25 09:50:39 [SUCC] New application successfully created!
tizi365
├── conf - 配置檔案存放目錄
│ └── app.conf - beego應用配置檔案,裡面包含一些預設的配置包括啟動埠、執行模式等等
├── controllers - 控制器目錄
│ └── default.go
├── main.go - 入口檔案
├── models - model目錄,存放我們的業務邏輯和資料庫相關的操作
├── routers - 路由配置目錄,主要存放我們各個業務模組的路由設定
│ └── router.go
├── static - 靜態資源目錄,預設靜態資源訪問url為 "http://域名/static/資源路徑"
│ ├── css
│ ├── img
│ └── js
├── tests - 單元測試指令碼目錄
│ └── default_test.go
└── views - 檢視模板目錄
└── index.tpl
2.2 api命令
上面的 new 命令是用來新建 Web 專案,不過很多使用者使用 beego 來開發 API 應用。所以這個 api 命令就是用來建立 API 應用的,執行命令之後如下所示:
# bee api apiProject
| ___ \
| |_/ / ___ ___
| ___ \ / _ \ / _ \
| |_/ /| __/| __/
\____/ \___| \___| v2.0.2
2022/05/07 16:12:14 INFO ▶ 0001 generate api project support go modules.
2022/05/07 16:12:14 INFO ▶ 0002 Creating API...
create /home/ubuntu/go/src/githud.com/infodriven/apiProject/go.mod
create /home/ubuntu/go/src/githud.com/infodriven/apiProject
create /home/ubuntu/go/src/githud.com/infodriven/apiProject/conf
create /home/ubuntu/go/src/githud.com/infodriven/apiProject/controllers
create /home/ubuntu/go/src/githud.com/infodriven/apiProject/tests
create /home/ubuntu/go/src/githud.com/infodriven/apiProject/conf/app.conf
create /home/ubuntu/go/src/githud.com/infodriven/apiProject/models
create /home/ubuntu/go/src/githud.com/infodriven/apiProject/routers/
create /home/ubuntu/go/src/githud.com/infodriven/apiProject/controllers/object.go
create /home/ubuntu/go/src/githud.com/infodriven/apiProject/controllers/user.go
create /home/ubuntu/go/src/githud.com/infodriven/apiProject/tests/default_test.go
create /home/ubuntu/go/src/githud.com/infodriven/apiProject/routers/router.go
create /home/ubuntu/go/src/githud.com/infodriven/apiProject/models/object.go
create /home/ubuntu/go/src/githud.com/infodriven/apiProject/models/user.go
create /home/ubuntu/go/src/githud.com/infodriven/apiProject/main.go
2022/05/07 16:12:14 SUCCESS ▶ 0003 New API successfully created!
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 模組,用來做單元測試的。
同時,該命令還支援一些自定義引數自動連線資料庫建立相關 model 和 controller: bee api[appname] [-tables=""] [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"] 如果conn 引數為空則建立一個示例專案,否則將基於連結資訊連結資料庫建立專案。
2.3 run命令
我們在開發 Go 專案的時候最大的問題是經常需要自己手動去編譯再執行, bee run 命令是監控beego 的專案,通過 fsnotify監控檔案系統。但是注意該命令必須在 $GOPATH/src/appname下執行。 這樣我們在開發過程中就可以實時的看到專案修改之後的效果:
bee run
13-11-25 09:53:04 [INFO] Uses 'myproject' as 'appname'
13-11-25 09:53:04 [INFO] Initializing watcher...
13-11-25 09:53:04 [TRAC] Directory(/gopath/src/myproject/controllers)
13-11-25 09:53:04 [TRAC] Directory(/gopath/src/myproject/models)
13-11-25 09:53:04 [TRAC] Directory(/gopath/src/myproject)
13-11-25 09:53:04 [INFO] Start building...
13-11-25 09:53:16 [SUCC] Build was successful
13-11-25 09:53:16 [INFO] Restarting myproject ...
13-11-25 09:53:16 [INFO] ./myproject is running...
我們開啟瀏覽器就可以看到效果 http://localhost:8080/
如果我們修改了 Controller 下面的 default.go 檔案,我們就可以看到命令列輸出:
13-11-25 10:11:20 [EVEN] "/gopath/src/myproject/controllers/default.go":
DELETE|MODIFY
13-11-25 10:11:20 [INFO] Start building...
13-11-25 10:11:20 [SKIP] "/gopath/src/myproject/controllers/default.go": CREATE
13-11-25 10:11:23 [SKIP] "/gopath/src/myproject/controllers/default.go": MODIFY
13-11-25 10:11:23 [SUCC] Build was successful
13-11-25 10:11:23 [INFO] Restarting myproject ...
13-11-25 10:11:23 [INFO] ./myproject is running...
重新整理瀏覽器我們看到新的修改內容已經輸出。
2.4 pack 命令
pack 目錄用來發布應用的時候打包,會把專案打包成 zip 包,這樣我們部署的時候直接把打包之後的專案上傳,解壓就可以部署了:
bee pack
app path: /gopath/src/apiproject
GOOS darwin GOARCH amd64
build apiproject
build success
exclude prefix:
exclude suffix: .go:.DS_Store:.tmp
file write to `/gopath/src/apiproject/apiproject.tar.gz`
我們可以看到目錄下有如下的壓縮檔案:
1. rwxr-xr-x 1 astaxie staff 8995376 11 25 22:46 apiproject
2. -rw-r--r-- 1 astaxie staff 2240288 11 25 22:58 apiproject.tar.gz
3. drwxr-xr-x 3 astaxie staff 102 11 25 22:31 conf
4. drwxr-xr-x 3 astaxie staff 102 11 25 22:31 controllers
5. -rw-r--r-- 1 astaxie staff 509 11 25 22:31 main.go
6. drwxr-xr-x 3 astaxie staff 102 11 25 22:31 models
7. drwxr-xr-x 3 astaxie staff 102 11 25 22:31 tests
2.5 bale 命令
這個命令目前僅限內部使用,具體實現方案未完善,主要用來壓縮所有的靜態檔案變成一個變數申明文
件,全部編譯到二進位制檔案裡面,使用者釋出的時候攜帶靜態檔案,包括 js、css、img 和 views。
最後在啟動執行時進行非覆蓋式的自解壓。
2.6 version 命令
這個命令是動態獲取 bee、beego 和 Go 的版本,這樣一旦使用者出現錯誤,可以通過該命令來檢視當前的版本
$ bee version
bee :1.2.2
beego :1.4.2
Go :go version go1.3.3 darwin/amd64
2.7 generate 命令
這個命令是用來自動化的生成程式碼的,包含了從資料庫一鍵生成 model,還包含了 scaffold 的,通過這個命令,讓大家開發程式碼不再慢
bee generate scaffold [scaffoldname] [-fields=""] [-driver=mysql] [-
1. conn="root:@tcp(127.0.0.1:3306)/test"]
2. The generate scaffold command will do a number of things for you.
3. -fields: a list of table fields. Format: field:type, ...
4. -driver: [mysql | postgres | sqlite], the default is mysql
-conn: the connection string used by the driver, the default is
5. root:@tcp(127.0.0.1:3306)/test
6. example: bee generate scaffold post -fields="title:string,body:text"
7.
8. bee generate model [modelname] [-fields=""]
9. generate RESTful model based on fields
10. -fields: a list of table fields. Format: field:type, ...
11.
12. bee generate controller [controllerfile]
13. generate RESTful controllers
14.
15. bee generate view [viewpath]
16. generate CRUD view in viewpath
17.
18. bee generate migration [migrationfile] [-fields=""]
19. generate migration file for making database schema update
20. -fields: a list of table fields. Format: field:type, ...
21.
22. bee generate docs
23. generate swagger doc file
24.
25. bee generate test [routerfile]
26. generate testcase
27.
28.
bee generate appcode [-tables=""] [-driver=mysql] [-
conn="root:@tcp(127.0.0.1:3306)/test"] [-level=3]
29. generate appcode based on an existing database
30.
-tables: a list of table names separated by ',', default is empty,
indicating all tables
31. -driver: [mysql | postgres | sqlite], the default is mysql
32. -conn: the connection string used by the driver.
33. default for mysql: root:@tcp(127.0.0.1:3306)/test
34.
default for postgres:
postgres://postgres:[email protected]:5432/postgres
35.
-level: [1 | 2 | 3], 1 = models; 2 = models,controllers; 3 =
models,controllers,router
2.8 migrate 命令
這個命令是應用的資料庫遷移命令,主要是用來每次應用升級,降級的SQL管理。
1. bee migrate [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"]
2. run all outstanding migrations
3. -driver: [mysql | postgresql | sqlite], the default is mysql
4.
-conn: the connection string used by the driver, the default is
root:@tcp(127.0.0.1:3306)/test
5.
6. bee migrate rollback [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"]
7. rollback the last migration operation
8. -driver: [mysql | postgresql | sqlite], the default is mysql
9.
-conn: the connection string used by the driver, the default is
root:@tcp(127.0.0.1:3306)/test
10.
11. bee migrate reset [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"]
12. rollback all migrations
13. -driver: [mysql | postgresql | sqlite], the default is mysql
14.
-conn: the connection string used by the driver, the default is
root:@tcp(127.0.0.1:3306)/test
15.
16. bee migrate refresh [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"]
17. rollback all migrations and run them all again
18. -driver: [mysql | postgresql | sqlite], the default is mysql
19.
-conn: the connection string used by the driver, the default is
root:@tcp(127.0.0.1:3306)/test
2.9 dockerize 命令
這個命令可以通過生成Dockerfile檔案來實現docker化你的應用。
例子:
生成一個以1.6.4版本Go環境為基礎映象的Dockerfile,並暴露9000埠:
1. $ bee dockerize -image="library/golang:1.6.4" -expose=9000
2. ______
3. | ___ \
4. | |_/ / ___ ___
5. | ___ \ / _ \ / _ \
6. | |_/ /| __/| __/
7. \____/ \___| \___| v1.6.2
8. 2016/12/26 22:34:54 INFO ▶ 0001 Generating Dockerfile...
9. 2016/12/26 22:34:54 SUCCESS ▶ 0002 Dockerfile generated.
更多幫助資訊可執行 bee help dockerize .
三、bee工具配置檔案
您可能已經注意到,在 bee 工具的原始碼目錄下有一個 bee.json 檔案,這個檔案是針對 bee 工
具的一些行為進行配置。該功能還未完全開發完成,不過其中的一些選項已經可以使用:
- "version": 0 :配置檔案版本,用於對比是否發生不相容的配置格式版本。
- "go_install": false :如果您的包均使用完整的匯入路徑(例如: github.com/user/repo/subpkg ),則可以啟用該選項來進行 go install 操作,加快構建操作。
- "watch_ext": [] :用於監控其它型別的檔案(預設只監控字尾為 .go 的檔案)。
- "dir_structure":{} :如果您的目錄名與預設的 MVC 架構的不同,則可以使用該選項進行修改。
- "cmd_args": [] :如果您需要在每次啟動時加入啟動引數,則可以使用該選項。
- "envs": [] :如果您需要在每次啟動時設定臨時環境變數引數,則可以使用該選項。