前端眼中的Go→我的第一个GO接口(一)

来源:互联网 发布:cctv网络直播电视 编辑:程序博客网 时间:2024/05/17 01:36

背景提要

① 前端开发工程师,完成了项目A的前端工作,包括页面及接口对接,含html+css+js及php层

② 出于职业规划,负责担任项目B的Server层开发,初次接触Go语言

③ 毕设项目为:JavaWeb搭建的一套系统,了解从【数据库–JDBC–server–页面】的运行逻辑

文章目的:

搭建http服务端,完成第一个GoServer层接口Connect

接口说明:判定数据库是否连接成功

接口流程:前端发送请求到指定URL,返回结果

搭建Go环境

此文不叙

简单项目架构

这里写图片描述


代码分析

main.go

package mainimport (    "fmt"    "dao")func main() {    fmt.Print("预备加载BI服务 ......\n")    dao.RegisterAPIRouter()}

main(主)服务执行文件,从代码可以看出,当加载main()方法后,调用了dao.RegisterAPIRouter()方法,这里dao是一个包,RegisterAPIRouterdao包中的一个方法。可以看到import的有dao这个包。

go的规则简单理解为,import即引入某个包后,即可以调用该包中的全局方法(大写开头的方法),不以包下的文件名做区分,只要是dao下的全局方法,都可以以dao.xxx的形式调用。

router.go

package daoimport (    "github.com/gin-gonic/gin"    "net/http")func RegisterAPIRouter() {    gin.SetMode(gin.DebugMode) //调试模式    router := gin.Default()     //获得路由实例    routerDatasource := router.Group("/data/source")    // 监听/data/source/connect的get和post请求,对应方法:ConnTest    routerDatasource.GET("/connect", ConnTest)    routerDatasource.POST("/connect", ConnTest)    //监听端口    http.ListenAndServe(":9000", router)}

这里引入了gin框架,更简便的搭建http服务器,监听url请求。上述代码监听/data/source/connectget和post请求,对应方法:ConnTest,监听端口为9000。而ConnTest方法在dao下的datasource.go中,触发监听时,会调用此方法。

datasource.go

package daoimport (    "database/sql"    _ "github.com/lib/pq"    _ "github.com/go-sql-driver/mysql"    "github.com/gin-gonic/gin")/** * [测试连接数据库] * @Author   CaiYu * @DateTime 2017-01-11T14:40:34+0800 * @param dbname        数据库名 * @param dbtype        数据库类型 * @param user          用户名 * @param password      密码 * @param port          端口 * @param host          主机*/func ConnTest(c *gin.Context) {    var(        status int         desc string        )    dbtype := c.Query("dbtype")    dbname := c.Query("dbname")    user   := c.Query("user")    password := c.Query("password")     host := c.Query("host")    port := c.Query("port")    constr := user+":"+password+"@tcp("+host+":"+port+")/"+dbname    db, err := sql.Open(dbtype, constr)    err = db.Ping()  //sql.Open无法断定数据库是否正常连接,所以调用db.Ping()进行判定    if err != nil {        status = 300        desc = "数据库连接失败"    }else{        status = 200        desc = "数据库连接成功"    }    c.JSON(200, gin.H{"status": status,"msg": desc})}

sql.Open()不会创建连接 ,只是创建一个DB实例,所以执行Open()函数时,系统并不会去获得数据库连接的有效性,执行数据库操作的时候才会去连接。

当我们需要在Open()之后就知道连接的有效性时,可以通过Ping()来进行。如上述代码所示。

我们对db.Ping()的结果进行了一个err判定,对应赋值,将结果以json的形式返回,方便前端调用。

项目编译(构建)

1.先把该项目加入到环境变量GOPATH中。

假设projectB目录位于~/gotest下,则应编辑~/.bashrc文件,并添加下面这行代码:

export GOPATH=~/gotest/projectB

2.然后使路径生效:

$ source ~/.bashrc

GOPATHPATH环境变量一样,也可以接受多个路径,并且路径和路径之间用冒号分割。

3.设置完GOPATH后,开始编译(构建)项目。

假设我们希望把生成的可执行文件放到projectB/bin目录中,需要执行的一系列指令如下:

$ cd ~/gotest/projectB/bin//runserver为我们主程序main.go所在的文件夹名称 $ go build runserver       

可以看到生成了名为一个runserver的文件,执行它即启动了projectB

 //启动服务./runserver     

执行后的结果,以及服务监听的反馈

这里写图片描述

调用请求

用postman发送请求

示例url:

127.0.0.1:9000/data/source/connect?dbname=mysql&user=admin&password=admin&host=127.0.0.1&port=3306&dbtype=mysql

返回结果如图所示:

这里写图片描述

结语

至此我的第一个GoServer接口就完成了:ip:port/data/source/connect

小功告成!

待续

0 0
原创粉丝点击