Beego 一個使用 Go 的思維來幫助您構建並開發 Go 應用程式的開源框架
----官網 beego 中文
以下同樣以連線mysql,提供查詢介面為例。
配置Go Path 和 Go Root
2.下載安裝(需要安裝git)
在go path下(一般是src下):
執行 go get github.com/astaxie/beego
執行 go get github.com/go-sql-driver 需要連線mysql
將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)
}
執行 bee run -gendoc=true -downdoc=true
5.1 開啟 http://localhost:8080/swagger/#
使用測試即可
原文地址:https://studygolang.com/articles/14664?fr=...
本作品採用《CC 協議》,轉載必須註明作者和本文連結