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

中小企业公共服务平台网站建设郑州做网站的公司有哪些

中小企业公共服务平台网站建设,郑州做网站的公司有哪些,怎么 网站 wordpress,pc网站建设意见上一篇过于gin的内容 https://mp.csdn.net/mp_blog/creation/editor/131953861 CSDNhttps://mp.csdn.net/mp_blog/creation/editor/131953861 一、路由组 为了管理具有相同前缀的URL, 将拥有URL共同前缀的路由划分为一组 为了代码的阅读性#xff0c;使用{}包裹相同组的路由…上一篇过于gin的内容 https://mp.csdn.net/mp_blog/creation/editor/131953861 CSDNhttps://mp.csdn.net/mp_blog/creation/editor/131953861 一、路由组 为了管理具有相同前缀的URL, 将拥有URL共同前缀的路由划分为一组 为了代码的阅读性使用{}包裹相同组的路由不用{}包裹并不影响效果 1.1路由组 为了管理具有相同前缀的URL, 将拥有URL共同前缀的路由划分为一组 为了代码的阅读性使用{}包裹相同组的路由不用{}包裹并不影响效果 上述的两个路由都是在shop这个组下 1.2路由组嵌套 1.3所有代码 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)//路由组的使用// 绑定路由规则shopGroup : r.Group(/shop){// /shop/infoshopGroup.GET(/info, func(ctx *gin.Context) {ctx.JSON(http.StatusOK, /shop/info)})// /shop/cartshopGroup.GET(/cart, func(ctx *gin.Context) {ctx.JSON(http.StatusOK, /shop/cart)})}//路由组嵌套// 绑定路由规则shopGroup1 : r.Group(/shop1){// shop/bookshopBookGroup1 : shopGroup1.Group(/book)// shop/book/infoshopBookGroup1.GET(/info, func(ctx *gin.Context) {ctx.JSON(http.StatusOK, shop/book/info)})}// 监听端口r.Run(:9000) }二、重定向事项 Gin之重定向 1.外部重定向(redirect重定向) 2.内部重定向(redirect重定向) 3.路由重定向(forward转发) // //go 1.重定向---www.baidu.comr.GET(/a, func(c *gin.Context) {//Redirect是*Context的方法,传入的参数是(code int, location string) ,无返回值//StatusMovedPermanently是301c.Redirect(http.StatusMovedPermanently, http://www.baidu.com/)})//内部重定向//2.内部重定向(redirect重定向)----内部重定向r.GET(/bb, func(c *gin.Context) {c.Redirect(http.StatusMovedPermanently, /b)})r.GET(/b, func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{hello: world,})})//3.路由重定向(forward转发)r.GET(/ab11, func(c *gin.Context) {/*Context结构体里有Request字段(类型是*http.Request),Request结构体里有一个URL字段(类型是*url.URL),URL结构体里面有path字段(类型是string)*///跳转到/b对应的路由处理函数c.Request.URL.Path /b11r.HandleContext(c)})r.GET(/b11, func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{hello: world,})}) 1. 三、其他内容 ,所有代码 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)//路由组的使用// 绑定路由规则shopGroup : r.Group(/shop){// /shop/infoshopGroup.GET(/info, func(ctx *gin.Context) {ctx.JSON(http.StatusOK, /shop/info)})// /shop/cartshopGroup.GET(/cart, func(ctx *gin.Context) {ctx.JSON(http.StatusOK, /shop/cart)})}//路由组嵌套// 绑定路由规则shopGroup1 : r.Group(/shop1){// shop/bookshopBookGroup1 : shopGroup1.Group(/book)// shop/book/infoshopBookGroup1.GET(/info, func(ctx *gin.Context) {ctx.JSON(http.StatusOK, shop/book/info)})}// //go 1.重定向---www.baidu.comr.GET(/a, func(c *gin.Context) {//Redirect是*Context的方法,传入的参数是(code int, location string) ,无返回值//StatusMovedPermanently是301c.Redirect(http.StatusMovedPermanently, http://www.baidu.com/)})//内部重定向//2.内部重定向(redirect重定向)----内部重定向r.GET(/bb, func(c *gin.Context) {c.Redirect(http.StatusMovedPermanently, /b)})r.GET(/b, func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{hello: world,})})//3.路由重定向(forward转发)r.GET(/ab11, func(c *gin.Context) {/*Context结构体里有Request字段(类型是*http.Request),Request结构体里有一个URL字段(类型是*url.URL),URL结构体里面有path字段(类型是string)*///跳转到/b对应的路由处理函数c.Request.URL.Path /b11r.HandleContext(c)})r.GET(/b11, func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{hello: world,})})// 监听端口r.Run(:9000) }
http://www.pierceye.com/news/428214/

相关文章:

  • 校园网站建设详细的设计方案php网站开发实战
  • 网站设计广州量计价格网站可信度建设
  • 门业网站 源码做企业网站必须要座机吗
  • 广东网站开发推荐wordpress快速加载
  • php网站开发外包北京网站建设迈程网络
  • 微信开发者平台取消授权seo资源网站排名
  • 将网站源码下载下来如何使用网站seo链接购买
  • 可信网站认证必须做苏州那里可以建网站
  • 手机网站底部代码有名的网站建设
  • 做一个网站需要多长时间网站制作有哪些种类
  • 做微信推送的网站小刘网站建设
  • 18款禁用软件app网站入口台州网站推广排名
  • 网站的服务内容济南网站制作方案
  • 微网站模板 phpwordpress 支付宝
  • wordpress dux主题破解安装全屏网站 图片优化
  • 一键建站公司做网站 怎么做留言
  • 制作的网站西安网页设计培训哪里有
  • 株洲市住房和城乡建设局门户网站中国建设银行官网站大同
  • 北京响应式网站制作公司wordpress邀请码注册
  • 衡阳网站开发有哪些公司怎么建设淘客自己的网站、
  • 国内扁平化网站欣赏什么站做咨询网站好
  • 评价校园网站建设范例wordpress插件获取数据库
  • 网站开发具体问题重庆装修公司排名前十名
  • 萝卜建站织梦网站采集如何做
  • 邢台在百度上做个网站河南营销网站建设联系方式
  • 电力建设科学技术进步申报网站教学工作总结
  • 做淘宝客必须建网站吗杭州网站优化效果
  • 网站开发有什么职位用vs做网站教程
  • 行业网站渠道选择和内容运营网站续费问题
  • 什么是seo优化推广阿里云网站建设优化