提供介面的幾種常用方式 (二,BeeGo)

kuibatian發表於2020-01-06

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 協議》,轉載必須註明作者和本文連結

相關文章