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 入口文件├─... 更多文件

比如我们现在要写一个登录的接口,那么我们在apis->user->user.go中创建一个login方法,
package userimport ("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"] = usernamec.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 routerimport ("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 mainimport (. "NowIM/router")func main() {router := InitRouter()if err := router.Run(":8081"); err != nil {panic(err)}}
另外这里要注意,端口必须前面带上:否则会无法启动。
这些步骤都做好了之后,那么就可以在根目录下运行go run main.go来启动服务
上面已经启动完成了,指定的端口8081,因为是本地运行,那么通过链接127.0.0.1:8081/user/login就可以访问到接口了

这里使用postman进行接口测试,在接口后带上参数username,并且将参数加入到json中返回。
