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

本文详细介绍使用Go语言实现HTTP服务的过程,包括环境搭建、项目架构设计、代码解析及数据库连接测试等关键步骤。

背景提要

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

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

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

文章目的:

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

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

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

搭建Go环境

此文不叙

简单项目架构

这里写图片描述


代码分析

main.go

package main

import (
    "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 dao

import (
    "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 dao
import (
	"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

小功告成!

待续

转载于:https://my.oschina.net/caiyunick/blog/823339

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值