目录
1.路由:
func main() { r := gin.default() r.get("/ping/:name", func(c *gin.context) { c.json(200, gin.h{ "message": c.param("name"), }) fmt.println(c.param("name")) }) r.run() // listen and serve on 0.0.0.0:8080 }
以冒号的形式设置url参数的话可以通过,对应的参数可以通过context.param的形式获得。但是存在问题 无法导向/ping本身
func main() { r := gin.default() r.get("/ping/*name", func(c *gin.context) { c.json(200, gin.h{ "message": c.param("name"), }) fmt.println(c.param("name")) }) r.run() // listen and serve on 0.0.0.0:8080 }
这里就存在另一种参数形式,也就是*,每次获得的参数都将包含/,也可以作用于/ping,如果当前的路由中不存在/ping的处理形式,将会自动跳转到/ping/并交给/ping/*name处理
并且/ping/*name与/ping/:name存在冲突,不能同时写入路由。
2.传参
func main() { r := gin.default() r.get("/ping", func(c *gin.context) { c.json(200, gin.h{ ":message": c.query("name"), }) }) r.run() // listen and serve on 0.0.0.0:8080 }
当get传参的时候(url上显示的参数)
可以通过context.query来获得对应的value,如果需要判断是否为空,则可以使用context.getquery更加优雅,也可以使用context.defaultquery类似于java中map的getordefault
当post传参的时候(请求写入body)
可以通过context.postform来获得对应的value,如果需要判断是否为空,则可以使用context.getpostform更加优雅,也可以使用context.defaultpostform类似于java中map的getordefault。
但是测试的时候发现,似乎这个方法不像springmvc中的requestbody可以获取对应的json,这里的操作会有些复杂,需要通过流,读取body,并且转换成json,通过map读取对应的参数
var user map[string]interface{} body, _ := ioutil.readall(req.body) json.unmarshal(body, &user) fmt.println("获取json中的username:", user["username"]) fmt.println("获取json中的password:", user["password"].(string)) //转字符串通过len(password)!=0判断长度
以上时大致方法,这里先提出一个疑问,看看后面的学习中是否能解决,不能直接通过中间件实现一个读取转化,从springmvc来看 这不是一个很难的轮子。