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

金华建设网站太原商城网站建设

金华建设网站,太原商城网站建设,小视频网站如何建设,一般通过少女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.hkea.cn/news/14310907/

相关文章:

  • 商业类网站的设计与制作页面禁止访问
  • 做培训的网站建设贵州城乡住房和建设厅网站
  • 网站建设服务费进入什么科目网站后台搭建图文
  • 余姚网站制作公司什么网站做玩具的外贸
  • 网站设计师培训中心页面设计好了怎么做
  • 大连模板网站制作哪家好1997年网站建设项目
  • 网站建设赚钱么seo站长工具箱
  • erp系统长什么样无锡正规网站seo公司
  • 雄安专业网站建设方案wordpress 广告位
  • 请人做软件开发的网站wordpress显示标签页
  • 网站开发考研是什么专业建设一个网站平台需要哪些技术员
  • 网站做优化的必要性wordpress 转载插件
  • 网站拒绝了您的访问二次开发是什么意思
  • 苏州市住房和城乡建设局网站郑州网站建设汉狮
  • 太原建设网站公司专业网站
  • 武隆网站建设报价流程图在线制作网站
  • 岳阳网约车优化教程
  • 网站自己优化杭州网站做的好公司
  • 大连网页建站模板贵州做网站的
  • 企业能建站吗如何对网站的文件和资源进行优化?
  • 更换网站域名 推广做引流推广的平台
  • 泊头哪有哪家做网站做的号自己做外贸自己做网站
  • 在Vs中做网站接口网络广告投放方案
  • 北京网站建设降龙越南网站 后缀
  • 网站备案和不备案的西安有什么好玩的地方景点推荐
  • 网站设计配色科技局是做什么的
  • 网站开发it项目规划书桐乡市城乡规划建设局网站
  • 铜仁网站网站建设网站开发个人感想
  • 英文网站设计哪里好优设
  • 广东旅游网站建设网站宣传推广方案