当前位置: 首页 > news >正文

网站建设扬州校园网站建设途径

网站建设扬州,校园网站建设途径,17173金币交易平台,深圳网站制作公司讯golang#xff0c;gin框架的请求参数#xff08;一#xff09; gin框架的重要性不过多的强调#xff0c;重点就gin使用中的参数传递#xff0c;获取进行梳理文件#xff0c;满足使用需求。 获取前端请求参数的几种方法#xff1a; 一、获取参数【浏览器地址获取参数】…golanggin框架的请求参数一 gin框架的重要性不过多的强调重点就gin使用中的参数传递获取进行梳理文件满足使用需求。 获取前端请求参数的几种方法 一、获取参数【浏览器地址获取参数】 1.浏览器地址栏获取参数 1.获取 URL (query)参数 例如/user/search?usernamezhangsanaddress北京。 获取请求的query参数的方法如下 URL 参数可以通过DefaultQuery() 和 Query() 两个参数获取 这两个【DefaultQuery() 和 Query() 】的区别就是DefaultQuery()可以放个默认参数如果没有存参数那么就是使用默认参数 Query()如果不给参数就是默认为“” 示例 1.1后端代码 package mainimport (github.com/gin-gonic/ginnet/http )// /user/search?usernamezhangsanaddress北京 // urlQuery 获取 url中?后面携带的参数 func urlQueryHandle(ctx *gin.Context) {// 如果指定的key 没有对应的值就使用默认值username1 : ctx.DefaultQuery(username, lisi)// 根据key 获取值username2 : ctx.Query(username)address : ctx.Query(address)// 返回JSON 字符串ctx.JSON(http.StatusOK, gin.H{message: ok,username1: username1,username2: username2,address: address,}) } func main() {// 创建默认路由r : gin.Default()// 绑定路由规则r.GET(/user/search, urlQueryHandle)// 监听端口r.Run(:9000) }1.2浏览器访问从中可以看到我们没有给任何参数后端Query查询的都是为“” 1.3带参数的访问 http://127.0.0.1:9000/user/search?usernametomaddressxianusernamejerry ?usernametomaddressxianusernamejerry 1.3.1postman获取参数 2.获取参数【获取Path参数(RestFul风格)】 请求的参数通过URL路径传递例如/user/search/lisi/北京。 获取请求URL路径中的参数的方式如下。 以下代码是上述两种浏览器获取参数的办法具体看代码品味下 package mainimport (github.com/gin-gonic/ginnet/http )// /user/search?usernamezhangsanaddress北京 // urlQuery 获取 url中?后面携带的参数 func urlQueryHandle(ctx *gin.Context) {// 如果指定的key 没有对应的值就使用默认值username1 : ctx.DefaultQuery(username, lisi)// 根据key 获取值username2 : ctx.Query(username)address : ctx.Query(address)// 返回JSON 字符串ctx.JSON(http.StatusOK, gin.H{message: ok,username1: username1,username2: username2,address: address,}) }// /user/search/lisi/北京。 获取请求URL路径中的参数的方式如下 // paramsPathHandle 获取url path中参数 func paramsPathHandle(ctx *gin.Context) {// 获取参数值username : ctx.Param(username)address : ctx.Param(address)// 数据返回ctx.JSON(http.StatusOK, gin.H{message: ok,username: username,address: address,}) }func main() {// 创建默认路由r : gin.Default()//两种浏览器地址获取参数的办法// 绑定路由规则 /user/search?usernamezhangsanaddress北京r.GET(/user/search, urlQueryHandle)// 2. 绑定路由规则/user/search/lisi/北京。 获取请求URL路径中的参数的方式如下r.GET(/user/search/:username/:address, paramsPathHandle)// 监听端口r.Run(:9000) }二、表单获取参数获取 Form参数 表单提交POST请求时http常见的传输格式有四种application/json (json格式) text/plain (text格式)application/x-www-form-urlencode表单默认提交格式application./xml (xml格式)multipart/form-data( 文件上传) 可以通过 DefaultPostForm() 和 PostForm() 两个方法获取默认解析的是 x-www-form-urlencode 和 form-data 格式的参数 2.1获取form表单数据 2.1.1application/x-www-form-urlencode表单默认提交格式 因为发起post请求前端只能用postman模拟了 返回结果 2.1.2form-data表单提交方式 2.2获取json参数【ctx.GetRowData()】 2.2.1请求数据application./json(json格式) 2.2.2 application./xml (xml格式) 2.3文件上传事项 2.3.1文件上传接收的文件格式要求 格式是: multipart/form-data 2.3.2多文件上传 2.4表单数据获取的代码 package mainimport (encoding/jsonfmtgithub.com/gin-gonic/ginnet/http )// /user/search?usernamezhangsanaddress北京 // urlQuery 获取 url中?后面携带的参数 func urlQueryHandle(ctx *gin.Context) {// 如果指定的key 没有对应的值就使用默认值username1 : ctx.DefaultQuery(username, lisi)// 根据key 获取值username2 : ctx.Query(username)address : ctx.Query(address)// 返回JSON 字符串ctx.JSON(http.StatusOK, gin.H{message: ok,username1: username1,username2: username2,address: address,}) }// /user/search/lisi/北京。 获取请求URL路径中的参数的方式如下 // paramsPathHandle 获取url path中参数 func paramsPathHandle(ctx *gin.Context) {// 获取参数值username : ctx.Param(username)address : ctx.Param(address)// 数据返回ctx.JSON(http.StatusOK, gin.H{message: ok,username: username,address: address,}) }//// formParamsHandle 获取form表单提交数据 func formParamsHandle(ctx *gin.Context) {// 获取不到值时就是用默认值username1 : ctx.DefaultPostForm(username, lisi)username2 : ctx.PostForm(username)address : ctx.PostForm(address)// 以Json 字符串的形式返回ctx.JSON(http.StatusOK, gin.H{message: ok,username1: username1,username2: username2,address: address,}) }// json参数 // paramsJsonHandle 获取json字符串相关的参数 func paramsJsonHandle(ctx *gin.Context) {// 获取request.Body() 中的数据(这里没有进行错误处理)// 返回的是字节数组dataBytes, _ : ctx.GetRawData()// 定义一个mapvar m map[string]interface{}// 反序列化 别忘了_ json.Unmarshal(dataBytes, m)// 数据返回ctx.JSON(http.StatusOK, m)}//文件上传 /*单个文件上传文件上传接收的文件格式是: multipart/form-data */// singleFileUploadHandle 当文件上传 func singleFileUploadHandle(ctx *gin.Context) {// 获取文件// 根据上传时的参数名获取上传的文件内容 -- 返回对象为 *multipart.FileHeaderfileHeader, err : ctx.FormFile(file)if err ! nil {ctx.JSON(http.StatusInternalServerError, gin.H{message: err.Error(),})return}// 保存文件内容// 拼接文件名, 这里直接写死了targetFileName : fmt.Sprintf(C:/Users/黑熊精/Pictures/%s, fileHeader.Filename)//targetFileName : fmt.Sprintf(%s, fileHeader.Filename)// 将文件保存到指定的目录err ctx.SaveUploadedFile(fileHeader, targetFileName)if err ! nil {ctx.JSON(http.StatusInternalServerError, gin.H{message: err.Error(),})} else {ctx.JSON(http.StatusOK, gin.H{message: fmt.Sprintf(%s upload success!, fileHeader.Filename),})} }//多文件上传/**多文件上传 */// multiFileUploadHandle 多文件上传 func multiFileUploadHandle(ctx *gin.Context) {// form 是一个存储文件信息的结构体/**type Form struct {Value map[string][]stringFile map[string][]*FileHeader*/form, err : ctx.MultipartForm()if err ! nil {ctx.JSON(http.StatusInternalServerError, gin.H{message: err.Error(),})return}// 获取文件列表并保存 返回的是一个切片 []*FileHeaderfiles : form.File[file]for i, file : range files {targetFileName : fmt.Sprintf(C:/Users/黑熊精/Pictures/%d_%s, i, file.Filename)err ctx.SaveUploadedFile(file, targetFileName)if err ! nil {ctx.JSON(http.StatusInternalServerError, gin.H{message: err.Error(),})return}}ctx.JSON(http.StatusOK, gin.H{message: fmt.Sprintf(upload success!),}) }func main() {// 创建默认路由r : gin.Default()//两种浏览器地址获取参数的办法// 绑定路由规则 /user/search?usernamezhangsanaddress北京r.GET(/user/search, urlQueryHandle)// 2. 绑定路由规则/user/search/lisi/北京。 获取请求URL路径中的参数的方式如下r.GET(/user/search/:username/:address, paramsPathHandle)//表单提交方法// 绑定路由规则r.POST(/user/search, formParamsHandle)//json// 绑定路由规则r.POST(/user/json, paramsJsonHandle)//// 绑定路由规则--文件上传r.POST(/upload/single, singleFileUploadHandle)绑定路由规则--多文件上传r.POST(/upload/multi, multiFileUploadHandle)// 监听端口r.Run(:9000) }2.5参数绑定--优化数据方式 使用 ShouldBind() 方法, 根据请求方式自动提取 JSON, form表单 和 Query 类型的参数放入结构体中 2.5.1url query参数解析 2.5.2form表单参数解析 2.5.3json 数据解析 三、程序的所有代码 package mainimport (encoding/jsonfmtgithub.com/gin-gonic/ginnet/http )// /user/search?usernamezhangsanaddress北京 // urlQuery 获取 url中?后面携带的参数 func urlQueryHandle(ctx *gin.Context) {// 如果指定的key 没有对应的值就使用默认值username1 : ctx.DefaultQuery(username, lisi)// 根据key 获取值username2 : ctx.Query(username)address : ctx.Query(address)// 返回JSON 字符串ctx.JSON(http.StatusOK, gin.H{message: ok,username1: username1,username2: username2,address: address,}) }// /user/search/lisi/北京。 获取请求URL路径中的参数的方式如下 // paramsPathHandle 获取url path中参数 func paramsPathHandle(ctx *gin.Context) {// 获取参数值username : ctx.Param(username)address : ctx.Param(address)// 数据返回ctx.JSON(http.StatusOK, gin.H{message: ok,username: username,address: address,}) }//// formParamsHandle 获取form表单提交数据 func formParamsHandle(ctx *gin.Context) {// 获取不到值时就是用默认值username1 : ctx.DefaultPostForm(username, lisi)username2 : ctx.PostForm(username)address : ctx.PostForm(address)// 以Json 字符串的形式返回ctx.JSON(http.StatusOK, gin.H{message: ok,username1: username1,username2: username2,address: address,}) }// json参数 // paramsJsonHandle 获取json字符串相关的参数 func paramsJsonHandle(ctx *gin.Context) {// 获取request.Body() 中的数据(这里没有进行错误处理)// 返回的是字节数组dataBytes, _ : ctx.GetRawData()// 定义一个mapvar m map[string]interface{}// 反序列化 别忘了_ json.Unmarshal(dataBytes, m)// 数据返回ctx.JSON(http.StatusOK, m)}//文件上传 /*单个文件上传文件上传接收的文件格式是: multipart/form-data */// singleFileUploadHandle 当文件上传 func singleFileUploadHandle(ctx *gin.Context) {// 获取文件// 根据上传时的参数名获取上传的文件内容 -- 返回对象为 *multipart.FileHeaderfileHeader, err : ctx.FormFile(file)if err ! nil {ctx.JSON(http.StatusInternalServerError, gin.H{message: err.Error(),})return}// 保存文件内容// 拼接文件名, 这里直接写死了targetFileName : fmt.Sprintf(C:/Users/黑熊精/Pictures/%s, fileHeader.Filename)//targetFileName : fmt.Sprintf(%s, fileHeader.Filename)// 将文件保存到指定的目录err ctx.SaveUploadedFile(fileHeader, targetFileName)if err ! nil {ctx.JSON(http.StatusInternalServerError, gin.H{message: err.Error(),})} else {ctx.JSON(http.StatusOK, gin.H{message: fmt.Sprintf(%s upload success!, fileHeader.Filename),})} }//多文件上传/**多文件上传 */// multiFileUploadHandle 多文件上传 func multiFileUploadHandle(ctx *gin.Context) {// form 是一个存储文件信息的结构体/**type Form struct {Value map[string][]stringFile map[string][]*FileHeader*/form, err : ctx.MultipartForm()if err ! nil {ctx.JSON(http.StatusInternalServerError, gin.H{message: err.Error(),})return}// 获取文件列表并保存 返回的是一个切片 []*FileHeaderfiles : form.File[file]for i, file : range files {targetFileName : fmt.Sprintf(C:/Users/黑熊精/Pictures/%d_%s, i, file.Filename)err ctx.SaveUploadedFile(file, targetFileName)if err ! nil {ctx.JSON(http.StatusInternalServerError, gin.H{message: err.Error(),})return}}ctx.JSON(http.StatusOK, gin.H{message: fmt.Sprintf(upload success!),}) }// shuldbind数据的绑定的办法 // 使用 ShouldBind() 方法, 根据请求方式自动提取 JSON, form表单 和 Query 类型的参数放入结构体中 // 用户信息信息结构体 // 加上 binding:required 标签说明该参数是必填的如果不填就会报错 type UserInfo struct {Username string json:username form:username binding:requiredAddress string json:address form:address binding:required }// 获取query参数 func queryHandle(ctx *gin.Context) {var userInfo UserInfo// 获取数据err : ctx.ShouldBind(userInfo)if err nil {ctx.JSON(http.StatusOK, gin.H{message: ok,username: userInfo.Username,address: userInfo.Address,})} else {ctx.JSON(http.StatusBadRequest, gin.H{error: err.Error()})} }func jsonHandle(ctx *gin.Context) {var userInfo UserInfo// 获取数据err : ctx.ShouldBind(userInfo)if err nil {ctx.JSON(http.StatusOK, gin.H{message: ok,username: userInfo.Username,address: userInfo.Address,})} else {ctx.JSON(http.StatusBadRequest, gin.H{error: err.Error()})} }func fromHandle(ctx *gin.Context) {var userInfo UserInfo// 获取数据err : ctx.ShouldBind(userInfo)if err nil {ctx.JSON(http.StatusOK, gin.H{message: ok,username: userInfo.Username,address: userInfo.Address,})} else {ctx.JSON(http.StatusBadRequest, gin.H{error: err.Error()})} }func main() {// 创建默认路由r : gin.Default()//两种浏览器地址获取参数的办法// 绑定路由规则 /user/search?usernamezhangsanaddress北京r.GET(/user/search, urlQueryHandle)// 2. 绑定路由规则/user/search/lisi/北京。 获取请求URL路径中的参数的方式如下r.GET(/user/search/:username/:address, paramsPathHandle)//表单提交方法// 绑定路由规则r.POST(/user/search, formParamsHandle)//json// 绑定路由规则r.POST(/user/json, paramsJsonHandle)//// 绑定路由规则--文件上传r.POST(/upload/single, singleFileUploadHandle)绑定路由规则--多文件上传r.POST(/upload/multi, multiFileUploadHandle)//使用 ShouldBind() 方法, 根据请求方式自动提取 JSON, form表单 和 Query 类型的参数放入结构体中// 绑定路由规则r.GET(/user/query, queryHandle)r.POST(/user/form, fromHandle)r.POST(/user/jsons, jsonHandle)// 监听端口r.Run(:9000) }
http://www.tj-hxxt.cn/news/220028.html

相关文章:

  • 网站设计一般是什么专业网络营销理论有哪些内容
  • 文化馆网站建设方案静宁县门户网
  • 外贸怎么建立自己的网站wordpress 机械
  • 做网站诱导充值犯法吗wordpress中文免费企业模板下载
  • 番禺大石做网站地方网站总结
  • 域名备案要多久seo外链工具软件
  • 制作微信网站模板网站建设公司如何规避风险
  • 室内设计网站大全网外贸企业做网站
  • 网站 asp.net php上海高端网站建设服务公
  • 宝安网站建设制作windows优化大师收费
  • 惠普电脑网站建设策划方案做学校后台网站用什么浏览器
  • 自己做游戏app的网站网站网站做维护
  • 网站 蓝色广告策划案优秀案例
  • 有很多长尾怎么做网站内容花都网站建设设计
  • .net 网站开发书籍wordpress主题美化
  • 网络推广就是做网站吗网站seo方案撰写
  • wordpress新闻资讯模块如何使用推广优化工具
  • 垦利网站制作张家口手机台app下载
  • 目前网站开发怎么兼顾手机广西南宁网站建设排行榜
  • 爱站建没工程信息网
  • 手表网站欧米茄价格网站中的幻灯片ie6显示 ie7如何兼容
  • 建设网站需要展示什么东莞网站建设
  • app页面制作wordpress 优化数据
  • 市桥做网站的公司忘记wordpress的账号和密码
  • 东莞网站建设纸品包装烟台企业展厅设计公司
  • 郑州营销网站托管wordpress 注册 中文版
  • 网站pv访问量统计怎么做网站设计与管理教程
  • 2015微信网站网站建设销售职责
  • 网站建设项目成本估算表注册城乡规划师报名
  • 东阳市建设规划局网站企业做一个网站多少钱