上一讲我们介绍了如何写让模板变量在页面上展示,本讲我们介绍一下后端开发工作中最常用的功能——接口。创建一个go_test4文件夹,然后把go_test3中的代码复制进去。然后打开main.go文件,进行更改。
说到接口就必不可少的涉及到传值和接口返回,还有GET方式 、POST方式获取数据。下面我们就先举例来看看一个GET接口如何接收参数并且返回数据,具体代码如下:
package main
import "github.com/gin-gonic/gin"
import "net/http"
func main() {
r:= gin.Default()
r.GET("/index", func(c *gin.Context) {
firstname := c.Query("firstname")
lastname := c.Query("lastname");
c.String(http.StatusOK, "Hello %s %s", firstname, lastname)
})
r.Run(":9999") // listen and serve on 0.0.0.0:9999
}
代码前半部分还是跟第七讲中一样,我们只需要关注 c.Query 和 c.String这两个差异点就可以了。c.Query方法相当于Nodejs请求下图代码中的paramStr=url.parse(req.url).query;这一行代码。
var http=require('http'),url=require('url'),
querystring=require('querystring');
http.createServer(function(req,res{
paramStr=url.parse(req.url).query;
)}
就是在url中查找Key为firstname的字段,然后把value 返回给firstname。lastname也是的获取方式也是一样的。
至于c.String本身跟c.HTML还是有一些差异的。c.String有三个参数,第一个是请求返回的Code码,这个参数直接http.StatusOK就可以。第二个参数是返回字符串原型,第三个是需要替换的字符串变量。
c.HTML也有三个参数,第一个也是请求返回的Code码,第二个是渲染HTML的模板地址(可以是html也就是不能设置模板变量的,也可以是tmpl可以设置模板变量的),最后一个是就是需要展示的模板变量名。
具体函数先介绍到这里,后面我们看一下运行代码之后的访问界面。
访问:http://localhost:9999/index?firstname=%22Chen1%22&lastname=%22Chen2%22
可以看到下图,我们在访问页面请求时加入了firtname和lastname参数。然后在通过Gin的router获取到了参数。最终把参数拼接为Hello "Chen1" "Chen2"字符串,返回给前端页面。
另外,在服务器控制台我们也能看到用户携带的对应参数信息,这部分信息不是我们打印的,而是Gin自动会在控制台拼接出访问用户的PATH,如下图所示。
我们已经讲过了GET请求的方式返回数据,以及获取URL中的参数。
接下来我们该完成另一个在平时开发中常用的接口形式——POST方法传递数据。
接下来我们把main.go文件改为下面的代码。
package main
import (
"fmt"
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.POST("/post", func(c *gin.Context) {
name := c.PostForm("name")
password := c.DefaultPostForm("password", "00000000")
result, ok := c.GetPostForm("ok")
fmt.Println(ok)
c.String(http.StatusOK, "hello %s %s %s", name, password, result)
})
r.Run(":9999") // listen and serve on 0.0.0.0:9999
}
然后执行go run main.go。
然后开启postman,发POST送一个请求,并且设置对应的参数name参数为aaaa,对应的password参数为password,对应的ok参数为ok。发送postman请求看看返回如下图所示。
c.String(http.StatusOK, "hello %s %s %s", name, password, result)方法中,我们请求的参数都已经返回。可以大家观察到还有一个fmt.Println(ok)没有输出。fmt.Println(ok)要在控制台中观察。如下图所示:
下面我们就对在后端中获取Gin中POST的参数的三个常用方法做一下介绍。
PostForm获取POST参数,如果没有获取到对应key的返回值,触发零值机制,返回空字符串
DefaultPostForm获取POST参数,如果没有获取到返回key的返回值,返回设置的默认值,也就是DefaultPostForm函数的第二个参数。
GetPostForm获取post参数,但是有两个返回值,第一个返回值表示返回结果,如果没有获取对应key的返回值时,同样出发零值机制,返回空字符串。第二个返回值会返回当时key值是否存在的状态,能获取到返回true,如果不能获取到返回false。
到此最常用的两种获取数据方式就介绍到这里了,有了他们其实我们就可以应对大部分的业务逻辑接口。
陈辰(CC老师) 978563552@qq.com