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

《使用Gin框架构建分布式应用》阅读笔记:p88-p100

《用Gin框架构建分布式应用》学习第6天,p88-p100总结,总计13页。

一、技术总结

1.MongoDB CRUD操作

(1)InsertOne(), InsertMany()

(2)Find()

(3)UpdateOne, UpdateMany()

(4)DeleteOne(), DeleteMany()

2.MongoDB primitive

p96,recipe.ID = primitive.NewObjectID() 中的 primitive 在 mongo-go-drive v2.0.0版中已经移除了。

二、英语总结

1.spaghetti code

第一次看到,记一下。spaghetti: u.pasta made in the form of long, thin strings意大利面条), 长这样:
在这里插入图片描述

深夜见不得这些,越看越饿。言归正传,spaghetti code就是“面条代码”,具体参考维基百科:https://en.wikipedia.org/wiki/Spaghetti_code,了解下概念即可。

三、其它

聊一聊阅读技术书籍经常遇到的一个问题。

1.旧代码无法使用怎么办?

func NewRecipeHandler(c *gin.Context) {// 使用 MongoDB 示例// 反序列化var recipe Recipeif err := c.BindJSON(&recipes); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}// recipe.ID = xid.New().String()recipe.ID = primitive.NewObjectID()recipe.PublishAt = time.Now()_, err := collection.InsertOne(ctx, recipe)if err != nil {c.JSON(http.StatusBadRequest, gin.H{"err": "Error while inserting a new recipe"})return}log.Println("insert successfully")c.JSON(http.StatusOK, gin.H{"recipe": recipe})}

这里以mongo-go-driver的primitive为例。作者在写该书的时候,使用的是v1.4.5。而现在,mongo-go-driver的最新版本是v2.0.0,为了与时俱进,我们最好是使用v2.0.0版本。那么问题来了,在v2.0.0中primitive无法使用怎么办?下面实际个人的一些处理:

(1)使用搜索引擎查找原因,了解一些用法在实际项目中的使用情况。

这里吐槽一下ChatGPT,ChatGPT给出了貌似可行,实际也是无法运行的代码:package main

import ("go.mongodb.org/mongo-driver/v2/bson/primitive""fmt")func main() {id := primitive.NewObjectID()fmt.Println(id)}

很遗憾,通过搜索引擎也没有看到其它人遇到这个问题,从这个结果来看,那么这种用法很可能在实际业务中根本没有人使用。这是我们要特别关注的地方,很多作者写书,因为作者未在实际项目中使用过,写出了一些demo项目,但这些代码在实际项目中往往无法使用,堪称“烂代码”。

(2)使用其它方式暂时替代,确保代码能运行。

假设确实没有找到原因,或者因为代码版本的问题无法使用,那么此时可使用其它方式进行替代,因为我们先要掌握整体情况。以primitive为例,

recipe.ID = xid.New().String()// recipe.ID = primitive.NewObjectID()

(3)暂时先跳过,提升阅读进度。

如果没有替代方法,那么就先跳过,不可花过多时间在上面,因为有时候读着读着,你会发现这并不是最终的做法,但作者为了演示某个操作,讲解某个知识点,而使用了它。虽然个人很不喜欢作者这种做法,但从阅读过的书来看,很多时候确实会存在这种情况。

四、参考资料

1. 编程

(1) Mohamed Labouardy,《Building Distributed Applications in Gin》:https://book.douban.com/subject/35610349

2. 英语

(1) Etymology Dictionary:https://www.etymonline.com

(2) Cambridge Dictionary:https://dictionary.cambridge.org
在这里插入图片描述

欢迎搜索及关注:编程人(a_codists)


http://www.mrgr.cn/news/54259.html

相关文章:

  • 035_基于php助农生鲜销售系统的设计与实现
  • 计算PSNR, SSIM, VAMF工具
  • 控制Stable Diffusion生成质量的多种方法
  • 深入了解Spring重试组件spring-retry
  • 全面解析:优化RAG效果的关键策略,非常详细收藏我这一篇就够了
  • Java全栈经典面试题剖析2】JavaSE面向对象1
  • 群控系统服务端开发模式-功能整理
  • 【移动安全】OWASP MASTG 移动应用程序安全测试指南
  • 大模型~合集14
  • 理解 React 中的 ReactElement、children 和 ReactNode
  • Java 线程池获取池中所有线程列表的方法
  • 优化方法之随机梯度下降SGD优化器收敛性证明
  • 代码随想录day04
  • mysql connect -- C api编译链接问题,接口介绍(初始化和销毁,连接,执行sql语句,获取结果集的元数据和数据,设置编码格式)
  • Python Logging 模块
  • Unexpected error: java.security.InvalidAlgorithmParameterException
  • 关于office中的word文档图片替换问题
  • MySQL程序介绍<二>
  • freeswitch-esl 进行强拆控制
  • 【代码随想录Day46】单调栈Part01
  • 探索计算机技术的无限可能:从基础到前沿的深度之旅
  • PCL 点云配准 非线性加权最小二乘优化的点到面ICP算法(精配准)
  • 使用 NVBit 进行内存访问跟踪指南
  • 希尔(shell)排序
  • 深入理解Reactor核心概念
  • 【部署篇】RabbitMq-02单机模式部署