beego是一個Golang實現的開源Go應用開發框架,他能夠用來快速開發 API、Web 及後端服務等各類應用,是一個 RESTful的框架,主要設計靈感來源於tornado、sinatra和flask這三個框架,可是結合了Go自己的一些特性(interface、struct 嵌入等)而設計的一個框架。linux
Beego Framework:
一個使用 Go 的思惟來幫助您構建並開發 Go 應用程序的開源框架
beego簡介git
安裝beegogithub
#go get github.com/astaxie/beego
安裝bee工具,bee工具是一個爲了協助快速開發beego項目而建立的項目,能夠經過bee快速建立項目、實現熱編譯、開發測試以及開發完以後打包發佈的一整套從建立、開發到部署的方案。json
#go get github.com/beego/bee
bee命令默認安裝在$GOPATH/bin下,把這個路徑添加到PATH中。flask
實踐中主要用到bee的三個子命令:api,run,pack。後端
api命令用來建立api應用,生成默認beego api應用框架。api
# bee api snmpcheck # tree snmpcheck/ snmpcheck/ ├── 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
其中,routers/router.go是路由的相關配置,controllers目錄下存放各個api路由下相關的控制器。restful
run命令用來編譯運行beego工程,並經過fsnotify監控源碼的改動,實現熱編譯,開發過程當中就能夠實時的看到項目修改以後的效果。session
# bee run bee :1.4.1 beego :1.6.1 Go :go version go1.5.1 linux/amd64 [INFO] Uses 'snmpcheck' as 'appname' [INFO] Initializing watcher... [TRAC] Directory(/home/lab/src/snmpcheck/controllers) [TRAC] Directory(/home/lab/src/snmpcheck) [TRAC] Directory(/home/lab/src/snmpcheck/models) [TRAC] Directory(/home/lab/src/snmpcheck/routers) [TRAC] Directory(/home/lab/src/snmpcheck/tests) [INFO] Start building... [SUCC] Build was successful [INFO] Restarting snmpcheck ... [INFO] ./snmpcheck is running... [parser.go:61][I] /home/lab/src/snmpcheck/controllers no changed [parser.go:61][I] /home/lab/src/snmpcheck/controllers no changed [asm_amd64.s:1696][I] http server Running on :7070
pack命令用來發布應用的時候打包。app
# bee pack app path: /home/lab/src/snmpcheck build snmpcheck GOOS linux GOARCH amd64 build success exclude relpath prefix: . exclude relpath suffix: .go:.DS_Store:.tmp file write to `/home/lab/src/snmpcheck/snmpcheck.tar.gz`
打包完的tar包中有應用的可執行文件和配置文件,部署時直接上傳這個tar包便可。
# tar -tf snmpcheck.tar.gz snmpcheck conf/app.conf
beego的路由設置比較靈活,包括固定路由,正則匹配路由,以及經過go反射機制實現的自動路由(可能會致使性能損耗,不推薦使用這種路由設置方式)和註解路由。
實踐中使用比較方便的註解路由方式。註解路由的使用:
首先在router中用namespace方式註冊控制器。這裏在/v1/user下,導入UserController控制器。
ns := beego.NewNamespace("/v1", ... beego.NSNamespace("/user", beego.NSInclude( &controllers.UserController{}, ), ), ... ) beego.AddNamespace(ns)
在控制器中對應方法上用註解方式註冊路由。
// @Title logout // @Description Logs out current logged in user session // @Success 200 {string} logout success // @router /logout [get] func (u *UserController) Logout() { u.Data["json"] = "logout success" u.ServeJSON() }
註解路由使用關鍵字@router。
這裏"@router /logout [get]"註冊了"Get /v1/user/logout -> UserController.Logout()"這樣的路由。
若是beego運行在dev模式(能夠在conf中配置),routers目錄下會生成路由通過解析後的結果commentsRouter.go,調試時能夠做爲參考。
beego提供了應用信息的監控和展現,能夠查看實時信息好比qps,健康情況,程序性能相關(goroutine,gc,cpu等),能夠查看靜態信息好比路由配置,conf配置信息,過濾器信息,還能夠查看和觸發任務。
進程監控默認是關閉的,能夠經過簡單的配置中打開,很方便:
EnableAdmin = true AdminHttpAddr = 0.0.0.0 #默認監聽地址是localhost AdminHttpPort = 8088
這樣,應用啓動後,會在8088端口提供監控展現服務。
beego經過swagger和內部的註釋解析可以實現自動文檔的效果,使用方法:
routers/router.go中路由只能使用namespace+Include的寫法,並且只支持二級解析,一級版本號,二級分別表示應用模塊。
routers/router.go文件中設置全局的應用信息。注意,必須寫在文件頂部。
註釋的格式(每一個字段的含義能夠參照Auto Docs):
// @Title login // @Description Logs user into the system // @Param username query string true "The username for login" // @Param password query string true "The password for login" // @Success 200 {string} login success // @Failure 403 user not exist // @router /login [get] func (u *UserController) Login() { username := u.GetString("username") password := u.GetString("password") if models.Login(username, password) { u.Data["json"] = "login success" } else { u.Data["json"] = "user not exist" } u.ServeJSON() }
在配置文件中打開自動文檔配置:
EnableDocs = true
啓動時添加自動文檔參數:
bee run -gendoc=true
知足以上配置,beego會自動解析控制器中的註釋,啓動swagger服務,並在/docs接口上提供已生成好的json字串。
訪問swagger服務並在swagger中訪問/docs接口,便可看到接口的文檔,同時也能夠對接口進行測試。