Beego初步

简介

beego是国内团队开源的golang开发框架,是一个关注度和使用量都比价高的项目。

Beego是一个成熟的MVC框架,它有着自己的日志库、ORM和web框架。你不需要再查找和安装第三方的库。Beego还有一个内置的工具bee,这个工具可以实时的监控代码的更改。

Beego可以大量的节省你的开发时间,尤其是项目初期可以帮你创建日志框架和程序架构。

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

beego
beego

快速启动 Quick Start

beego文档快速入门中给出一个很简单的例子。

安装

beego 包含一些示例应用程序以帮您学习并使用 beego 应用框架。

你需要安装或者升级 Beego 和 Bee 的开发工具:

  1. $ go get -u github.com/astaxie/beego
  2. $ go get -u github.com/beego/bee

为了能够直接使用bee命令,需要将$GOPATH/bin添加到$PATH变量中。

创建应用

创建一个名为hello的应用,可以选择web应用,或者api应用:
$ bee new hello //创建一个web应用
$ bee api hello //创建一个api应用

执行结束后,会在当前目录下创建名为hello的目录:

  1. .
  2. |____hello
  3. | |____conf
  4. | | |____app.conf
  5. | |____controllers
  6. | | |____default.go
  7. | |____main.go
  8. | |____models
  9. | |____routers
  10. | | |____router.go
  11. | |____static
  12. | | |____css
  13. | | |____img
  14. | | |____js
  15. | | | |____reload.min.js
  16. | |____tests
  17. | | |____default_test.go
  18. | |____views
  19. | | |____index.tpl

编译运行

进入hello目录中,执行bee run,就会完成编译、运行:

  1. $ cd hello/
  2. $ bee run
  3. ______
  4. | ___ \
  5. | |_/ / ___ ___
  6. | ___ \ / _ \ / _ \
  7. | |_/ /| __/| __/
  8. \____/ \___| \___| v1.9.1
  9. 2017/10/30 14:33:05 INFO 0001 Using 'hello' as 'appname'
  10. 2017/10/30 14:33:05 INFO 0002 Initializing watcher...
  11. 2017/10/30 14:33:06 SUCCESS 0003 Built Successfully!
  12. 2017/10/30 14:33:06 INFO 0004 Restarting 'hello'...
  13. 2017/10/30 14:33:06 SUCCESS 0005 './hello' is running...
  14. 2017/10/30 14:33:06 [I] [asm_amd64.s:2197] http server Running on http://:8080

打包发布

项目打包发布:

  1. $ bee pack

代码生成

生成models:

  1. bee generate model user -fields="name:string,age:int"

生成controller:

  1. bee generate controller user

生成view:

  1. bee generate view user

生成文档:

  1. bee generate docs

自动生成

从数据库一键生成代码

  1. bee generate appcode [-tables=""] [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"] [-level=3]
  2. generate appcode based on an existing database
  3. -tables: a list of table names separated by ',', default is empty, indicating all tables
  4. -driver: [mysql | postgres | sqlite], the default is mysql
  5. -conn: the connection string used by the driver.
  6. default for mysql: root:@tcp(127.0.0.1:3306)/test
  7. default for postgres: postgres://postgres:postgres@127.0.0.1:5432/postgres
  8. -level: [1 | 2 | 3], 1 = models; 2 = models,controllers; 3 = models,controllers,router

例如为数据库中所有的表生成models、controllers、router:

  1. bee generate appcode -driver=mysql -conn="root:@tcp(127.0.0.1:3306)/kube-loadbalance" -level=3
  2. $ ls models/
  3. backend.go listener.go object.go resource.go user.go
  4. cluster.go loadbalancer.go pool.go template.go
  5. $ ls controllers/
  6. backend.go listener.go object.go resource.go user.go
  7. cluster.go loadbalancer.go pool.go template.go
  8. routers/routers.go中也自动生成了路由:
  1. func init() {
  2. ns := beego.NewNamespace("/v1",
  3. beego.NSNamespace("/backend",
  4. beego.NSInclude(
  5. &controllers.BackendController{},
  6. ),
  7. ),
  8. beego.NSNamespace("/cluster",
  9. beego.NSInclude(
  10. &controllers.ClusterController{},
  11. ),
  12. ),
  13. ...

生成controller

  1. bee generate controller user

生成models

  1. bee generate model user -fields="name:string,age:int"

生成view

  1. bee generate view user

生成文档

自动创建swagge文件:

  1. $ bee generate docs

启动后访问/swagger查看api:

  1. func main() {
  2. if beego.BConfig.RunMode == "dev" {
  3. beego.BConfig.WebConfig.DirectoryIndex = true
  4. beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
  5. }
  6. beego.Run()
  7. }

注意,如果是第一次运行,带上-downdoc=true:

  1. bee run -downdoc=true