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

news/2024/10/20 0:12:19

《用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.ryyt.cn/news/73621.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

在blender中打开pmx文件

适用blender版本: 3.6 - 4.0 - 4.1 - 4.2 等 本人使用的blender版本为3.6 和 4.2 这里用3.6作案例下载cats插件在github中查找cats-blender-plugin 比如说这个:https://github.com/absolute-quantum/cats-blender-plugin下载最新的插件 注意: 插件版本只对应相应的blender版本…

操作系统_Paxos协议实现数据一致性更新

一、实验环境 系统:Windows10 编译软件:Visual Studio 2022 语言:C 二、内容 假设由5台服务器Ai(i=1,2..5)组成集群,每份数据在5台服务器中各保留一个副本。当客户端C1和C2同时修改存储在集群中的同一个数据时,由于网络修改延迟的存在无法保证两个数据的请求到达每台服务器…

操作系统_MPI程序设计

一、实验环境搭建 本次MPI集群环境是在电脑中安装mpi的sdk和应用程序后在visual studio 2022 上配置MPI环境。VC++目录---》包含目录---》添加MPI的include目录VC++目录---》库目录---》添加MPI的x64目录VC++目录---》预编译器---》输入“MPICH_SKIP_MPICXX”点击确认。VC++目录…

session测试

jsp1 <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head><meta charset="UTF-8"><title>session测试</title> </…

704.二分查找

题目 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9 输出: 4 解释: 9 出现在 nums 中并且下标为 4 示例 2:输入: nums = [-…

win11微软拼音输入法变繁体字

0. 设置→时间和语言 1. 时间和语言→语言和区域2. 中文简体→语言选项3. 键盘→微软拼音→键盘选项4. 常规5. 选择字符集→简体中文

泰山学堂选拔游记

泰山学堂选拔游记 前言:由于相关保密协议,所有与选拔试题与详细细节有关的内容将被剔除。 Tips:由于神秘因素,我在中学阶段的各个平台部分文章与笔记已经进行了隐藏。 插曲:等通知大学的经典通知方式 通过笔试后,要加对应取向面试群了解消息,但各个取向过笔试预留加面试…

mongo基本命令(一)

一 前言 环境: win10 mongo6.0.1 记录一些基本的mongo查询命令 二 查询命令 1 进入命令行 进入mongo命令行,我这里是mongo是装在docker里面的 需要先在docker里面启动mongo容器 docker exec -it xxx bash 进入mongo容器,xxx为mongo容器名 mongosh 进入mongo命令行,我安装…