提供接口的几种常用方式(二,BeeGo)

geeker2018 · · 5473 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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


使用测试即可


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:geeker2018

查看原文:提供接口的几种常用方式(二,BeeGo)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

5473 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传