第二节建立基础web服务

Gin是使用Go编写的一个web框架,具有高性能的特点,也是比较常用的一款web框架,类似的还有echo框架,今天这个就说一下使用gin做一个web接口。

这是我的一个简单的目录,分别对应的是

yourAppName  WEB部署目录(或者子目录)
├─apis          	接口目录
│  ├─user           用户模块
│  │  ├─user.go     用户接口 
│  ├─websocket      websocket模块 
│  │  ├─socket.go   socket接口
│  │  ├─struct.go   结构体文件
├─config            配置
│  ├─config.json    配置文件
├─middleware        应用目录
│  ├─DB        		数据库连接
│  ├─tools    		小工具
│  │  ├─config.go   读取配置
│  ├─...      		集成的一些小工具。第三方adk,api等
│  │
├─router          	路由
│  ├─router.go      路由文件
│─go.mod            Golang包管理工具
│  ├─go.sum         Golang包
├─main.go     		入口文件
├─...				更多文件

![](https://img-blog.csdnimg.cn/img_convert/bd9935735de9b73b02a74e83f87581b1.png#align=left&display=inline&height=876&margin=[object Object]&originHeight=876&originWidth=482&size=0&status=done&style=none&width=482)

比如我们现在要写一个登录的接口,那么我们在apis->user->user.go中创建一个login方法,


package user

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

func Login(c *gin.Context) {
	// 获取get方式参数
	// username := c.Param("username")
	username := c.Query("username")
	// 获取post方式参数
	// username := c.PostForm("username")
	// 获取header参数
	// c.Request.Header.Get("username")

	data := make(map[string]interface{}, 0)

	data["username"] = username

	c.JSON(http.StatusOK, gin.H{
		"message": "success",
		"status":  http.StatusOK,
		"data":    data,
	})
	c.Abort()
	return
}

在这个文件中我们用到了gin的框架包,因为我这里是已经get过所以是显示成,在项目初始化的时候需要执行 go get github.com/gin-gonic/gin来获取这个包,我们才可以使用,不然的话这里就会报错。在方法中Login(c *gin.Context)就可以使用gin框架了,gin框架中自带了几种获取参数的方式,get方式通过url获取参数c.Query("username"),c.Param("username"),post方式通过c.PostForm("username")来获取参数,还有通过c.Request.Header.Get("username")来获取header中的参数,当然获取参数的方式不止这些,这里只列举了几个,可以前往gin官网查看文档,或者通过查看源码来了解更多的获取参数方式。

接口写好了后我们要在访问到接口那么需要配置一下路由,在router目录中创建router.go文件


package router

import (
	"NowIM/apis/user"
	"NowIM/apis/websocket"
	"github.com/gin-gonic/gin"
)

func InitRouter() *gin.Engine {
	router := gin.Default()
	router.GET("/", websocket.WebsocketManager.WsClient)

	router.GET("/user/login", user.Login)

	return router
}

首先定义一个gin的初始化engine,再往engine中加入我们需要访问到对应接口的路由, 比如上面定义了使用get方式请求路由地址为/user/list访问到对应的登录接口,路由这里写好了那么在根目录下的main.go文件中初始化我们的路由。并且设置访问的端口。


package main

import (
	. "NowIM/router"
)

func main() {
	router := InitRouter()

	if err := router.Run(":8081"); err != nil {
		panic(err)
	}
}

另外这里要注意,端口必须前面带上:否则会无法启动。 这些步骤都做好了之后,那么就可以在根目录下运行go run main.go来启动服务 ![](https://img-blog.csdnimg.cn/img_convert/7d8dcc6e111f33d28ff8100d69d8ab40.png#align=left&display=inline&height=480&margin=[object Object]&originHeight=480&originWidth=1596&size=0&status=done&style=none&width=1596)

上面已经启动完成了,指定的端口8081,因为是本地运行,那么通过链接127.0.0.1:8081/user/login就可以访问到接口了

![](https://img-blog.csdnimg.cn/img_convert/15a428b1254cf3c8ff8d36634b6e08d4.png#align=left&display=inline&height=1364&margin=[object Object]&originHeight=1364&originWidth=886&size=0&status=done&style=none&width=886) 这里使用postman进行接口测试,在接口后带上参数username,并且将参数加入到json中返回。