提供接口的幾種常用方式(二,BeeGo)

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/#


使用測試即可

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • beego orm是一個基于Go進行ORM操作的庫,它采用了Go style方式對數(shù)據(jù)庫進行操作,實現(xiàn)了struc...
    副班長國偉閱讀 2,162評論 2 5
  • GoLang-Beego.Godep 介紹你是一個從PHP,Python,Ruby等動態(tài)語言轉(zhuǎn)移到Go的web應用...
    燕京博士閱讀 1,283評論 0 3
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 原文 web框架中,路由是重要的一環(huán),對于beego的路由配置如何?讓我們從入口文件先分析起來吧: 我們看到 ma...
    若與閱讀 13,916評論 0 13
  • 自嘲,很多時候是一種低調(diào)的偽裝, 比如說,經(jīng)常聽見有些人說自己是屌絲, 但是別人說他一句屌絲, 可能臉就不那么友善...
    文顛閱讀 405評論 0 0

友情鏈接更多精彩內(nèi)容