范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

GO语言(十三)使用Go和Gin开发RESTfulAPI(下)

  编写处理程序以添加新项目
  当客户端在 发出POST请求时/albums,您希望将请求正文中描述的专辑添加到现有专辑数据中。
  为此,您将编写以下内容: 将新专辑添加到现有列表的逻辑。 将请求路由POST到您的逻辑的一些代码。
  1、编写代码
  a.添加代码以将专辑数据添加到专辑列表。
  在语句之后的某处import,粘贴以下代码。(文件末尾是这段代码的好地方,但 Go 并不强制你声明函数的顺序。) // postAlbums adds an album from JSON received in the request body. func postAlbums(c *gin.Context) {     var newAlbum album      // Call BindJSON to bind the received JSON to     // newAlbum.     if err := c.BindJSON(&newAlbum); err != nil {         return     }      // Add the new album to the slice.     albums = append(albums, newAlbum)     c.IndentedJSON(http.StatusCreated, newAlbum) }
  在此代码中:
  1)用于Context.BindJSON 将请求正文绑定到newAlbum。
  2)album将从 JSON 初始化的结构附加到albums 切片。
  3)向响应添加201状态代码,以及表示您添加的专辑的 JSON。
  b.更改您的main函数,使其包含该router.POST函数,如下所示。 func main() {     router := gin.Default()     router.GET("/albums", getAlbums)     router.POST("/albums", postAlbums)      router.Run("localhost:8080") }
  在此代码中:
  1)将路径中的POST方法与 /albumspostAlbums函数相关联。
  使用 Gin,您可以将处理程序与 HTTP 方法和路径组合相关联。这样,您可以根据客户端使用的方法将发送到单个路径的请求单独路由。
  2、运行代码
  a.如果服务器从上一节开始仍在运行,请停止它。
  b.从包含 main.go 的目录中的命令行,运行代码。 $ go run .
  c.从不同的命令行窗口,用于curl向正在运行的 Web 服务发出请求。 $ curl http://localhost:8080/albums      --include      --header "Content-Type: application/json"      --request "POST"      --data "{"id": "4","title": "The Modern Sound of Betty Carter","artist": "Betty Carter","price": 49.99}"
  该命令应显示添加专辑的标题和 JSON。 HTTP/1.1 201 Created Content-Type: application/json; charset=utf-8 Date: Wed, 02 Jun 2021 00:34:12 GMT Content-Length: 116  {     "id": "4",     "title": "The Modern Sound of Betty Carter",     "artist": "Betty Carter",     "price": 49.99 }
  d.与上一节一样,使用curl检索完整的专辑列表,您可以使用它来确认添加了新专辑。 $ curl http://localhost:8080/albums      --header "Content-Type: application/json"      --request "GET"
  该命令应显示专辑列表。 [         {                 "id": "1",                 "title": "Blue Train",                 "artist": "John Coltrane",                 "price": 56.99         },         {                 "id": "2",                 "title": "Jeru",                 "artist": "Gerry Mulligan",                 "price": 17.99         },         {                 "id": "3",                 "title": "Sarah Vaughan and Clifford Brown",                 "artist": "Sarah Vaughan",                 "price": 39.99         },         {                 "id": "4",                 "title": "The Modern Sound of Betty Carter",                 "artist": "Betty Carter",                 "price": 49.99         } ]
  编写处理程序以返回特定项目
  当客户端向 发出请求时GET /albums/[id],您希望返回 ID 与id路径参数匹配的专辑。
  为此,您将: 添加逻辑以检索请求的相册。 将路径映射到逻辑。
  1、编写代码
  a.在您在上一节中添加的函数下方postAlbums,粘贴以下代码以检索特定专辑。
  此getAlbumByID函数将提取请求路径中的 ID,然后找到匹配的专辑。 // getAlbumByID locates the album whose ID value matches the id // parameter sent by the client, then returns that album as a response. func getAlbumByID(c *gin.Context) {     id := c.Param("id")      // Loop over the list of albums, looking for     // an album whose ID value matches the parameter.     for _, a := range albums {         if a.ID == id {             c.IndentedJSON(http.StatusOK, a)             return         }     }     c.IndentedJSON(http.StatusNotFound, gin.H{"message": "album not found"}) }
  在此代码中:
  (1)Context.Param用于从 URL 中检索id路径参数。当您将此处理程序映射到路径时,您将在路径中包含参数的占位符。
  (2)循环album切片中的结构,寻找其ID 字段值与id参数值匹配的结构。如果找到,则将该album结构序列化为 JSON,并将其作为带有200 OK HTTP 代码的响应返回。
  如上所述,实际使用中的服务可能会使用数据库查询来执行此查找。
  (3)如果找不到专辑,则返回 HTTP 404错误。
  b.最后,更改您的main,使其包含对router.GET的新调用,路径现在为/albums/:id ,如以下示例所示。 func main() {     router := gin.Default()     router.GET("/albums", getAlbums)     router.GET("/albums/:id", getAlbumByID)     router.POST("/albums", postAlbums)      router.Run("localhost:8080") }
  在此代码中:
  (1)将/albums/:id路径与getAlbumByID功能相关联。在 Gin 中,路径中项目前面的冒号表示该项目是路径参数。
  2、运行代码
  a.如果服务器从上一节开始仍在运行,请停止它。
  b.在包含 main.go 的目录中的命令行中,运行代码以启动服务器。 $ go run .
  c.从不同的命令行窗口,用于curl向正在运行的 Web 服务发出请求。 $ curl http://localhost:8080/albums/2
  该命令应显示您使用其 ID 的专辑的 JSON。如果找不到专辑,您将收到带有错误消息的 JSON。 {         "id": "2",         "title": "Jeru",         "artist": "Gerry Mulligan",         "price": 17.99 }
  结论
  恭喜!您刚刚使用 Go 和 Gin 编写了一个简单的 RESTful Web 服务。
  完成的代码
  本节包含您使用本教程构建的应用程序的代码。 package main  import (     "net/http"      "github.com/gin-gonic/gin" )  // album represents data about a record album. type album struct {     ID     string  `json:"id"`     Title  string  `json:"title"`     Artist string  `json:"artist"`     Price  float64 `json:"price"` }  // albums slice to seed record album data. var albums = []album{     {ID: "1", Title: "Blue Train", Artist: "John Coltrane", Price: 56.99},     {ID: "2", Title: "Jeru", Artist: "Gerry Mulligan", Price: 17.99},     {ID: "3", Title: "Sarah Vaughan and Clifford Brown", Artist: "Sarah Vaughan", Price: 39.99}, }  func main() {     router := gin.Default()     router.GET("/albums", getAlbums)     router.GET("/albums/:id", getAlbumByID)     router.POST("/albums", postAlbums)      router.Run("localhost:8080") }  // getAlbums responds with the list of all albums as JSON. func getAlbums(c *gin.Context) {     c.IndentedJSON(http.StatusOK, albums) }  // postAlbums adds an album from JSON received in the request body. func postAlbums(c *gin.Context) {     var newAlbum album      // Call BindJSON to bind the received JSON to     // newAlbum.     if err := c.BindJSON(&newAlbum); err != nil {         return     }      // Add the new album to the slice.     albums = append(albums, newAlbum)     c.IndentedJSON(http.StatusCreated, newAlbum) }  // getAlbumByID locates the album whose ID value matches the id // parameter sent by the client, then returns that album as a response. func getAlbumByID(c *gin.Context) {     id := c.Param("id")      // Loop through the list of albums, looking for     // an album whose ID value matches the parameter.     for _, a := range albums {         if a.ID == id {             c.IndentedJSON(http.StatusOK, a)             return         }     }     c.IndentedJSON(http.StatusNotFound, gin.H{"message": "album not found"}) }

商务部前三季度新能源汽车销量达215。7万辆中新网10月15日电据商务部网站消息,商务部消费促进司负责人今日介绍今年前三季度我国汽车消费情况。据悉,19月,生产企业新能源汽车销量215。7万辆,同比增长1。9倍。该负责人表示朱江明的零跑瞄准的不是蔚小理,而是特斯拉你不懂车,造什么车?曾经有人这么质疑过朱江明,如果我是朱江明,我可能会回怼你不懂我,干嘛来质疑我?但显然是我的格局小了,面对质疑,他选择了沉默,并没有选择辩解更没有回怼。而他和零跑CEO年薪过亿,谁说了算?打工皇帝最强打工人是网友给年薪过亿CEO们的称号。最近,联想集团退休董事长柳传志和现任CEO杨元庆的过亿年薪,以及高管团队数千万元的天价薪酬,引发了网友热议。提到高薪的互联网大佬,Square准备做挖矿平台,要成为加密世界的苹果吗?今天,square发布新闻,称正在考虑构建比特币的挖矿平台。而square已经在打造比特币硬件钱包,以及去中心化交易所。Square的创始人JackDorsey,一直以来都是比特币目睹病友一个个离世!43岁京东副总裁患绝症砸千万元求生,一个瞬间让他痛哭来源钱江晚报我们之中的一些人,终其一生或许都无法寻找到自我。寻常人或许难以理解,为何生命进入倒计时,仍在对某种不可能实现的梦想孜孜以求?留给自己的时间又剩多少?可是进入蔡磊的生活,新能源车阻燃剂价格暴涨,全球龙头万盛股份投资价值飙升作为未来几年前景最为明确也最为广阔的战略性产业,新能源车产业链成为了市场热捧的焦点,上到黄磷锂矿镍钴等原材料以及正负极材料电解液隔膜等核心部件,下到锂电池生产商和整车厂家,其中的优2G让网站火了,3G让社交软件火了,4G又火了直播与小视频,5G你认为会带火什么?2G时代,受限网带宽和移动互联网没有普及,有限的网络资源只能集中在最重要的吸收点,门户网站以其权威性和及时性,成为互联网第一批受益者,当时社交要想火也难火,大家只能坐在电脑前面用Q为什么苹果手机在中国这么受欢迎?为什么苹果手机在中国这么受欢迎?前一段时间的苹果13抢购狂潮,引起无数热议。有的人激动,有的人愤怒,还有的人无奈。以前美国人抵制华为的时候,国内全国人民愤慨,发声要求抵制苹果。要苹索尼中国因违反广告法被罚100万,是新机发布还是心机发布?天眼查App显示,近日,索尼(中国)有限公司因违反中华人民共和国广告法(2018)第九条第一款第(四)项,被北京市朝阳区市场监督管理局罚款100万元。决定文书号为京朝市监罚字202工科男,需求是一部能足够达到编程开发图像处理建模渲染等功能。有什么笔记本可以推荐?笔记本渲染够呛,不是算力不够而是散热不够,长时间满负荷硬件折寿苹果行哪。最新出的mbp1416就可以,还有联想拯救者r9000系列站在生产力的角度来讲,笔记本很难满足你长期的需求,如何验证助听器佩戴是否有效果?用户经过检查,佩戴上适合的助听器,做言语评估和声场评估等等,都可以看到戴上助听器的效果。专业的听力机构可以通过声场评估和言语评估来测试用户戴上助听器前后的佩戴效果。可以到专业的验配
中国体彩和福彩为什么不设立官方app,在软件上购买彩票?几年前是有其他软件代买的,有那么两三年可以,然后突然就给停了,一点是网上不安全,大神的各种骚操作控制不住,或者你花了钱人家不一定给你买了(骗钱虚假操作)或者你中奖了被别人冒领了,第vivo和iQOO有什么区别,这两款该怎么选择呢?iQOO是vivo孵化的全新子品牌。iQOO品牌的命名源自IQuestOnandOn,寓意着追求不止进击不止的品牌内涵。同时,iQOO的品牌主张为生而强悍,体现了iQOO对极致性能元宇宙时代,腾讯可能仍是老大今年开始,元宇宙这个词成为新的风口。国外有Facebook改名meta进军元宇宙,国内各大公司也是纷纷表态在做相关准备,怕自己错失这个新的风口。口炮者有之,行动者有之,但好像只有腾非985211大学的计算机系本科生进不了腾讯网易和百度这些公司工作吗?任何事情都是变化的,其他学校毕业的应届生也可以到腾讯网易和百度公司去工作不过相对来说,学历不是211985的计算机系的本科生,要想直接进入腾讯网易和百度基本上是比登天还难因为现在的AppleWatch再次因拯救生命的干预措施而受到赞誉据AppleInsider报道,一块AppleWatch多次提醒一名女性她的心率过低,导致她多次到医院就诊并安装心脏起搏器。PattiSohn联系了在圣路易斯的当地新闻团队KMOV什么是区块链?什么是区块链?区块链是一种数据库。区块链技术应用是银行及很高大上的公司,不是小商小贩。区块链服务器是由研究区块链技术的团队推出的安装好数据库应用的服务器,按协议卖给应用单位的。随着联想集团为什么至今没有任何回复?不好回答,很难掌握分寸。因为所有的问诘依据是联想自己的公开资料,很难不打脸。不敢回答,意识到了社会潮流。因为近期社会上逐步涌现一股反对经济寡头,打倒金融买办的思潮,生怕被推倒浪尖上为什么苹果手机通话的时候不能录音?这个问题对苹果来说在技术上实现很简单,苹果自我标榜为尊重客户隐私,但苹果商店有可以通话录音的APP,就是要收费,你说苹果打脸不打脸,这反映了苹果公司既想当,又想立,同时还有大家说的互联网体育风云5小米出大招9秒83,再掀体育狂潮小米集团在看到阿里巴巴因为体育而产生巨大流量的时候,已经开始慢慢的打造自己在体育方面的产品了。本来还没想着要投入那么多的资源,只是想跟紧其他的互联网巨头走一步见一步,但是现在既然看马斯克再出售超93万股特斯拉股票,本月已卖出916万股11月24日,据美国证交会文件显示,特斯拉CEO马斯克于11月23日以6。24美元的价格行使2152681份期权,同一日,马斯克总计通过105笔交易出售了934,091股股票,此次中国人现在对联想的怨气为什么这么大?原因可能是多方面的,但人们主要还是关注其中的利益问题。一上世纪九十年代,中国的企业改制前,都是国有企业或集体企业,人们关注在改制过程中,是否存在损公肥私现象。二这些企业的改制,靠的