google,google play

  google,google play

  文章目录去网(一)杜松子酒框架简介你好世界杜松子酒基础1.路由答。路由乙。路由组丙.路由拆分和注册2.请求参数获取。全球资源定位器(Uniform Resource Locator)参数乙。宁静参数帖子答.表单参数乙。车身参数去网(一)杜松子酒框架简介杜松子酒是一个开发的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点

  安装:

  去找github.com/gin-gonic/gin吧我在安装过程中,有以下的包没有成功安装,采用了手动下载然后放到工作目录下

  hello world/**

  *杜松子酒版本你好世界

  */

  func GinHelloWorld() {

  r :=琴酒。默认()

  //杜松子酒。语境,封装了请求和反应

  r.GET(/hello_gin ,func(context *gin .上下文){

  语境。字符串(http ."你好,世界")

  })

  r.运行(:8080 )

  }访问localhost:8080/hello_gin

  杜松子酒基础1.路由a.路由//路由

  func GinRoute() {

  //默认路由器

  r :=琴酒。默认()

  //获取请求

  r.GET(/get ,func(context *gin .上下文){

  //路由处理函数

  })

  //发布请求

  r.POST(/post ,func(context *gin .上下文){

  })

  //上传请求

  r.PUT(/put ,func(context *gin .上下文){

  })

  //删除请求

  r.DELETE(delete ,func(context *gin .上下文){

  })

  }b .路由组路线组是为了管理一些相同的URL,就是相当于在控制器类上加上@RequestMapping(),相当于全球资源定位器(统一资源定位器)的公共前缀

  //路由组

  v1 :=r.Group(/v1 )

  v1 .GET(/vv1 ,func(context *gin .上下文){

  //url: /v1/vv1

  语境。字符串(200,“vv1”)

  })

  v2 :=r.Group(/v2 )

  v2 .GET(/vv2 ,func(context *gin .上下文){

  //url: /v2/vv2

  语境。字符串(200,“vv2”)

  })

  c.路由拆分和注册上面那种只能应用于简单的项目或者演示中

  当项目的规模增大后就不太适合继续在项目的main.go文件中去实现路由注册相关逻辑了,我们会倾向于把路由部分的代码都拆分出来,形成一个单独的文件或包:

  -服务

  -控制器

  -经手人

  -路线

  -

  在路线包中可以分类管理路由:

  bookRoute.go

  func BookRoute(r *gin .引擎){

  //注册书相关路由

  r.GET(/getBook ),句柄MyGetBookhandler)

  r.POST(/addBook),句柄AddBookHandler)

  }用户路线。去

  func UserRoute(r *gin .引擎){

  r.帖子(/用户),句柄AddUser)

  }统一注册:

  //路由注册函数

  func SetupRouter() *gin .引擎{

  r :=琴酒。默认()

  //将子路由模块设置

  图书路线(r)

  用户路线(r)

  返回r

  }处理器函数分别调用服务层:

  func AddUser(r *gin .上下文){

  //调用服务

  }在主要的函数中:

  func main() {

  r :=路线SetupRouter()

  if err:=r . Run(:8080 );呃!=零{

  fmt .Println(启动服务失败,错误:%v\n ,错误)

  }

  }参考:

  路由拆分和注册2.请求参数Geta.url参数全球资源定位器(统一资源定位器)参数即得到请求中的请求参数,即全球资源定位器(统一资源定位器)后明文拼接的参数,可以通过查询()和默认查询()获取

  查询()相当于学习笔记一中的注解@RequestParam(),若不存在则返回空字符串默认查询()在在询问获取不到相应字段时//url参数

  r.GET(/getUrlParams ,func(context *gin .上下文){

  名称:=上下文。查询(名称)

  年龄:=语境。查询("年龄")

  defaultParam :=上下文DefaultQuery(testDefault , testtest )

  语境JSON(http .StatusOK,map[string]接口{}{

  姓名:姓名,

  年龄:年龄,

  “default value”:default param

  })

  })

  乙。宁静参数//api参数

  r.GET(/getParams/:name/:age ,func(context *gin .上下文){

  //上下文封装了请求和响应

  名称:=上下文Param(name )

  年龄:=语境 Param(年龄)

  fmt .名称

  fmt .打印时间(年龄)

  //返回数据

  语境JSONP(http .状态、姓名、年龄)

  })

  波斯塔。表单参数!声明文档类型

  html lang=en

  头

  meta charset=UTF-8

  meta name= viewport content= width=device-width,initial-scale=1.0

  meta http-equiv= X-UA-Compatible content= ie=edge

  标题文档/标题

  /头

  身体

  form action= http://localhost:8080/form method= post action= application/x-www-form-urlencoded

  用户名:输入类型= text name= username placeholder=请输入你的用户名英国铁路公司

  密码:输入类型=密码名称=用户密码占位符=请输入你的密码英国铁路公司

  输入类型=提交值=提交

  /表单

  /body

  /html //表单参数

  r.POST(/form ,func(context *gin .上下文){

  //获取表单参数

  用户名:=上下文。后置格式("用户名")

  密码:=上下文。后置格式("密码")

  语境JSON(http .StatusOK,map[string]接口{}{

  用户名:用户名,

  密码:密码,

  })

  })

  乙。车身参数接收请求体的身体,将身体转为数据后处理也是现在前后端分离的交互方式

  定义接收数据结构:标签中数据是你身体中如果使用数据的话,就是键

  //定义接收数据的数据结构即身体

  类型请求体结构{

  //绑定:"必需"修饰的字段,若接收为空值,则报错,是必须字段

  用户名字符串形式:用户名json:用户名xml:用户名绑定:必需

  “password int”格式:“password”JSON:“password”XML:“password”绑定:“required”

  }处理程序函数:

  //接收并解析请求中的身体参数

  r.POST(/post ,func(context *gin .上下文){

  可变主体请求主体

  如果错误:=上下文ShouldBindJSON(body);呃!=零{

  日志。致命(解析身体错误:,错误)

  //杜松子酒H。封装了生成数据数据的工具

  语境JSON(http .状态请求,杜松子酒H{error:err})

  }

  //解析正确

  语境JSON(http .杜松子酒H{body:body})

  })

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: