Beego 一個使用 Go 的思維來幫助您構建并開發(fā) Go 應用程序的開源框架
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ----官網(wǎng) ?beego 中文
以下同樣以連接mysql,提供查詢接口為例。
1.下載golang
配置Go Path 和 Go Root
2.下載安裝(需要安裝git)
在go path下(一般是src下):
執(zhí)行 ?go get github.com/astaxie/beego
執(zhí)行 ?go get github.com/go-sql-driver 需要連接mysql
3. 提供Api接口
將go path下的bin添加到環(huán)境變量,因為go get 后bin文件夾會有一個bee可執(zhí)行文件,我們可以使用bee工具快速的搭建框架。
3.1 運行?bee api apiproject ,生成如下文件目錄:

3.1.1 conf 文件夾
app.conf
項目的配置開關,具體請查閱官方文檔,實在太豐富,下面就添加api項目最常用的:
appname = apiproject //項目名稱
httpport = 8080 //服務端口
runmode = dev //服務環(huán)境
autorender = false //前端交互
copyrequestbody = true //請求體復制
EnableDocs = true //生成自動化文檔
3.1.2 controllers文件夾
作用:處理路由
添加一個新的文件,personInfo.go
package controllers
import (
????"apiproject/models"
????"encoding/json"
????"github.com/astaxie/beego"
)
// Operations about Persons
type PersonController struct {
????beego.Controller//繼承基本的控制類
}
func (u *PersonController) Get() { //添加一個Get請求函數(shù)
????uid := u.GetString(":uid")
????if uid != "" {
????????user, err := models.GetPerson(uid) //調(diào)用下面的model中函數(shù)
????????if err != nil {
????????????u.Data["json"] = err.Error()
????????} else {
????????????u.Data["json"] = user
????????}
????}
????u.ServeJSON()//以Json的形式返回
}
3.1.3 models文件夾
作用:連接mysql,提供查詢
添加一個新的文件,personInfo.go
package models
import (
????"errors"
????"strconv"
????"time"
????"fmt"
????"github.com/astaxie/beego/orm"
????_ "github.com/go-sql-driver/mysql" // import your used driver
)
var (
????PersonList map[string]*Person
)
func init() {
????PersonList = make(map[string]*Person)
????u := Person{"1", "myself", "ID", "M", "臺灣省"}
????PersonList["myself"] = &u
????orm.RegisterDriver("mysql", orm.DRMySQL)
????//set default model
????orm.RegisterDataBase("default", "mysql", "username:password@tcp(127.0.0.1:3306)/databases?charset=utf8", 30)
????fmt.Printf("數(shù)據(jù)庫連接成功!\n")
????//orm.RegisterModel(new(Person))
????orm.Debug = true
????orm.RegisterModel(new(Person))
}
type Person struct {
????Id? ? ? string `orm:"column(id);pk"` //設置主鍵
????Name? ? string `orm:"column(Name)"` //設置對應的數(shù)據(jù)庫的名字,否則會自動轉(zhuǎn)換大寫字母為小寫字母,導致匹配不上
????CtfTp? string `orm:"column(CtfTp)"`
????Gender? string `orm:"column(Gender)"`
????Address string `orm:"column(Address)"`
}
//models 下的文件,在controller下personInfo.go 中被調(diào)用。
func GetPerson(uId string) (s []Person, err error) {
????fmt.Println("get one person info")
????//var j, i int64
????o := orm.NewOrm()
????var users []Person
????//users := make([]Person, 10)
????_, err1 := o.Raw("SELECT Id,Name,CtfTp,Gender,Address FROM personinfo WHERE Name = ? ", uId).QueryRows(&users)
????if err1 == nil {
????????//????num, _ := res.RowsAffected()
????????//fmt.Println("mysql row affected nums: ", num, users)
????????//i = num
????} else {
????????fmt.Println("err:", err1)
????????fmt.Println(users)
????????return nil, err1
????}
????//for j = 0; j < i; j++ {
????//????fmt.Printf("Element[%d] = %v,len=%v\n", j, users[j].Name, len(users[j].Name))
????//}
????return users, nil
}
3.1.4 routers文件夾
注冊路由,設置請求方式,設置處理路由函數(shù)
修改commmentsRouter_controllers.go文件
package routers
import (
????"github.com/astaxie/beego"
????"github.com/astaxie/beego/context/param"
)
func init() {
beego.GlobalControllerRouter["apiproject/controllers:PersonController"] = append(beego.GlobalControllerRouter["apiproject/controllers:PersonController"],
????????beego.ControllerComments{
????????????Method:? ? ? ? ? "Get",
????????????Router:? ? ? ? ? `/:uid`,
????????????AllowHTTPMethods: []string{"get"},
????????????MethodParams:? ? param.Make(),
????????????Params:? ? ? ? ? nil})
}
路由設置以及初始化
修改router.go文件
package routers
import (
????"apiproject/controllers"
????"github.com/astaxie/beego"
)
func init() {
????ns := beego.NewNamespace("/v1",
????????beego.NSNamespace("/personInfo",
????????????beego.NSInclude(
????????????????&controllers.PersonController{},
????????????),
????????),
????)
????beego.AddNamespace(ns)
}
4.運行編譯 bee run
5.自動化測試文檔
運行 ?bee run?-gendoc=true -downdoc=true
5.1 ? 打開 ?http://localhost:8080/swagger/#

使用測試即可