Beego 一个使用 Go 的思维来帮助您构建并开发 Go 应用程序的开源框架
----官网 beego 中文
以下同样以连接mysql,提供查询接口为例。
1.下载golang
配置Go Path 和 Go Root
2.下载安装(需要安装git)
在go path下(一般是src下):
执行 go get github.com/astaxie/beego
执行 go get github.com/go-sql-driver 需要连接mysql
3. 提供Api接口
将go path下的bin添加到环境变量,因为go get 后bin文件夹会有一个bee可执行文件,我们可以使用bee工具快速的搭建框架。
3.1 运行 bee api apiproject ,生成如下文件目录:
3.1.1 conf 文件夹
app.conf
项目的配置开关,具体请查阅官方文档,实在太丰富,下面就添加api项目最常用的:
appname = apiproject //项目名称
httpport = 8080 //服务端口
runmode = dev //服务环境
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请求函数
uid := u.GetString(":uid")
if uid != "" {
user, err := models.GetPerson(uid) //调用下面的model中函数
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("数据库连接成功!\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)"` //设置对应的数据库的名字,否则会自动转换大写字母为小写字母,导致匹配不上
CtfTp string `orm:"column(CtfTp)"`
Gender string `orm:"column(Gender)"`
Address string `orm:"column(Address)"`
}
//models 下的文件,在controller下personInfo.go 中被调用。
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文件夹
注册路由,设置请求方式,设置处理路由函数
修改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/#
使用测试即可