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

广州思盾互动网站建设公司小企业网站建设怎么做好

广州思盾互动网站建设公司,小企业网站建设怎么做好,md风格WordPress,网站置顶代码上一篇过于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://wiki.neutronadmin.com/news/134026/

相关文章:

  • 深圳住房和建设局网站轮候大厅手机网价格直降
  • 免费授权企业网站源码邯郸中国建设银行网站
  • 好看的网站的导航怎么做专业外包网站建设公司
  • 给别人做网站的公司杭州企业网站优化
  • 桓台网站开发天涯社区和海南在线不能正常访问
  • asp代码如何修改asp网站网页域名名称禅城网站建设公司价格
  • 网站pr怎么提升网站的定位
  • 网站空间如何使用小程序收录wordpress主题
  • 如何建设像艺龙一样网站php是做网站还是网页
  • 长春做高端网站公司wordpress 多层分类
  • jquery网站模板加工平台网站
  • 多元 集团 网站建设方案瑞华特散热器网站谁给做的
  • 做wap网站能火吗怎么建设网站怎么样
  • 茶叶品质网站建设做一个交易网站要花多少钱
  • 购买模板做网站跨境电商 网站开发
  • 网站备份 ftpwordpress vip 插件
  • 公司后台的网站代理维护更新律师事务所网站 备案
  • 谢岗网站建设网页设计与制作论文1000字
  • 泉州城乡住房建设厅网站MEZZANINE wordpress
  • 免费刷网站百度关键词建站公司跑路了域名怎么办
  • 湖南网站制作哪家专业网站制作公司代理
  • 网站seo分析常用的工具是wordpress建站版本推荐
  • wordpress做的视听网站河南外贸网站建设
  • 如何做百度站长绑定网站浏览器编程语言
  • 云南集优科技网站南通网站定制哪家好
  • 代理龙华网站建设济宁网站建设专业定制
  • 电子商务网站建设策划报告手机商城 手机网站建设
  • 培训网站 建网站推广咋做的
  • 外网视频网站做泥声控哪些网站可以做问卷
  • 做电商的进货网站北京网站建设外包公司排名