Golang
文章平均质量分 68
RumIV
这个作者很懒,什么都没留下…
展开
-
【Golang】Go语言中的并发模式
这些模式是编写Go语言并发程序的基础。每种模式都有其使用场景、优点和缺点,您可能会发现结合多种模式可以为您的应用程序提供最佳解决方案。仔细考虑应用程序的具体需求,并选择合适的模式。转载 2024-11-07 16:08:31 · 16 阅读 · 0 评论 -
【Golang】语言的组合之道
Go 语言对组合的偏爱并非偶然,而是经过深思熟虑的设计选择。组合能够带来更清晰、更模块化的代码结构,使代码更易于理解、维护和扩展。未来,随着 Go 语言的不断发展,组合的应用将会更加广泛。例如,我们可以利用泛型和接口的组合来构建更加通用和灵活的代码库。总而言之,组合是 Go 语言的核心设计理念之一,它为构建灵活、高效的软件提供了强大的支持。掌握组合的精髓,将有助于我们写出更优雅、更健壮的 Go 代码。转载 2024-10-31 17:55:41 · 12 阅读 · 1 评论 -
【Golang】使用 Redis 解决并发问题
场景: 构建一个股票交易应用,多个用户可以同时购买不同公司的股票。每个公司都有一个剩余的股票数量,用户只能购买剩余的股票。代码}),// 获取当前剩余股票数量if err!= nil {return err// 验证剩余股票数量是否足够// 更新公司剩余股票数量return nil// 运行并发客户端idx++ {wg.Wait()// 获取公司剩余股票数量if err!= nil {panic(err)问题。转载 2024-10-08 10:37:34 · 213 阅读 · 0 评论 -
【Golang】基于内存的简单发布订阅系统
基于内存的简单发布订阅系统是一种简单、快速、易于实现的消息传递机制,适合小型应用。通过扩展,它可以支持更多功能,满足更复杂的应用需求。转载 2024-10-08 10:22:16 · 132 阅读 · 0 评论 -
【Golang】使用 interface 时的 7 个常见错误
如果通过创建许多模拟来滥用接口,最终测试的将是生产中从未使用过的模拟,而不是应用程序的实际逻辑。在 Go 中定义接口时,你定义的不是 "某物是什么",而是 "某物提供了什么"--是 "行为",而不是 "事物"!由于无法预知需要哪些抽象,因此很容易编写出过多的接口,而这些接口在日后要么是错误的,要么是无用的。正如 Djikstra 所说,理想的接口必须是 "一个新的语义层次,在这个层次上,人们可以绝对精确"。如果一个方法返回的是接口而不是具体的结构,那么所有调用该方法的客户端都会被迫使用相同的抽象。转载 2024-08-16 09:46:51 · 68 阅读 · 0 评论 -
【Golang】函数式编程能有多优雅?
综上所述,Go语言中的函数因其具有与其他数据类型相同的地位和能力,包括可以存储在变量中、作为参数传递以及作为返回值返回等特性,而被视为一等公民。它指导我们将程序看作是一系列函数运算的组合,通过函数来描述变量之间的关系,并强调函数作为一等公民的重要性。函数式编程的主要思想是将计算机程序看作是一系列数学函数的组合,通过函数的组合和变换来实现程序的功能。:纯函数是函数式编程中的一个重要概念。Go语言支持高阶函数,因为函数在Go中是一等公民,可以被赋值给变量、作为参数传递给其他函数,或者作为其他函数的返回值。转载 2024-08-13 14:08:57 · 86 阅读 · 0 评论 -
【Golang】异步编程小技巧
那context 结构是什么样的?举个例子如果并发去访问同一个库,如果并发度是10的话,那么QPS的量将会被扩大10倍,如果这个时候数据库扛不住对应的并发,会造成雪崩的情况,所以这种时候并不适合用并发来优化程序的性能。一个Goroutine消耗多少CPU 实际上跟执行函数的逻辑有着很大的关系,如果执行的函数是CPU密集型的计算,并且持续的时间很长,那么这个时候CPU就会优先到达瓶颈。需要注意的是,在 Go 中 Goroutine 的调度是非确定性的,也就是说,Goroutine 之间的调度是不可预测的。转载 2024-08-08 15:50:57 · 73 阅读 · 0 评论 -
【Golang】莫非这就是Go最佳协程池
如果想让项目中的goruntine使用的更加高效,协程池似乎是一个必备的工具,因为Go语言非常的简单,自己手写一个协程池也并非难事,但是做为一名还未达到顶尖水平的Gopher,学习他人的优秀代码是一个需要经历的过程,综上所述,Go语言的协程池在并发编程中具有重要的作用,通过合理使用协程池,可以优化系统资源的使用,提高并发性能和吞吐量,同时简化并发编程的复杂性。:在需要对任务进行调度和负载均衡的场景中,协程池可以提供有效的任务排队和调度机制,确保任务能够按照预定的策略执行。这提高了系统的响应速度和吞吐量。转载 2024-07-29 11:43:45 · 169 阅读 · 0 评论 -
【Golang】Steam 创意工坊 Mod 文件夹批量重命名
Steam创意工坊下载的Mod文件夹批量重命名为id+名称运行前运行后步骤获取当前工作目录:脚本首先获取当前的工作目录,以便后续操作基于此目录进行。读取目录内容:接着,脚本读取并遍历当前目录下的所有文件和文件夹。查找并解析XML文件:对于每个子文件夹,脚本检查是否存在文件。如果存在,脚本将读取并解析此XML文件。读取PublishedFileId.txt:脚本还会读取文件的内容。重命名文件夹:最后,脚本使用从XML和文件中获取的信息来重命名子文件夹。此结构体用于解析XML文件中的标签。原创 2024-06-21 15:12:09 · 700 阅读 · 0 评论 -
【Golang】基于 excelize 的 Excel 工具包
本文详细介绍了Golang中excelize库的基本使用方法,包括初始化Excel对象、常用操作等。通过这些方法,我们可以轻松地对Excel进行各种各样的操作。在实际开发中,我们可以根据自己的需求,灵活运用这些方法,实现复杂的Excel操作。原创 2024-05-10 14:01:13 · 1384 阅读 · 0 评论 -
【Golang】判断数组中是否包含指定元素
本文将介绍如何在Go语言中实现这一功能,并提供一个通用的函数IsContain,用于检查切片中是否包含指定的元素。原创 2024-05-10 10:22:51 · 1384 阅读 · 1 评论 -
【Golang】实现 Excel 文件下载功能
在写入数据后,我们将 HTTP 响应的 “Content-Type” 头设置为 “application/vnd.openxmlformats-officedocument.spreadsheetml.sheet”,这将告诉浏览器响应是一个 Excel 文件。首先,我们创建了一个新的 Excel 文件,并设置其工作表名称为 “Sheet1”。然后,我们使用嵌套的 for 循环向工作表中写入数据。最后,我们使用 excelize 包的 Write() 方法将 Excel 文件写入 HTTP 响应的主体中。原创 2024-05-08 18:07:43 · 791 阅读 · 0 评论 -
【Golang】VSCode进行GO的调试
Couldn’t start dlv dap:Error:Cannot find Delve debugger (dlv dap) 问题原创 2024-05-08 14:36:17 · 1029 阅读 · 0 评论 -
【Golang】Gin教学-获取请求信息并返回
Gin是一个用Go(又称Golang)编写的HTTP Web框架,它具有高性能和简洁的特点。在Web开发中,我们经常需要处理不同类型的HTTP请求,例如查询参数、JSON数据和表单数据。本文将介绍如何使用Gin,实现接收任何请求并返回请求信息。原创 2024-04-19 17:11:12 · 1205 阅读 · 0 评论 -
【Golang】Gorm乐观锁optimisticlock的使用
线程B完成了操作,也将版本号加一(version=1)试图向数据库提交数据(money=70),但此时比对数据库记录版本时发现,线程B提交的数据版本号为1 ,数据库记录当前版本也为1,不满足 “ 提交版本必须大于记录当前版本才能执行更新 “ 的乐观锁策略,因此,线程B的提交被驳回。线程A完成了修改工作,将数据版本号加一(version=1),连同帐户扣除后余额(money=50),提交至数据库更新,此时由于提交数据版本大于数据库记录当前版本,数据被更新,数据库记录version更新为1。原创 2024-02-23 18:01:37 · 991 阅读 · 0 评论 -
【Golang】ModbusRTU协议CRC16校验算法
CRC(循环冗余检查)校验是一种广泛用于检测数据传输或存储过程中是否发生错误的技术。本篇博客将介绍如何使用Go语言实现CRC16校验算法,并给出一个示例。原创 2024-01-30 14:59:25 · 979 阅读 · 0 评论 -
【Golang】下载文件请求返回
如果要下载的是一个由字符串生成的文件,而不是一个已经存在的文件,你可以在Gin中动态创建一个响应,将字符串作为文件内容发送给客户端。当访问这个路由时,它会检查指定的文件是否存在,如果存在,它会设置适当的响应头,并将文件作为附件提供给客户端。我们设置了相同的响应头,以便客户端将响应作为文件下载,而不是在浏览器中直接显示。在这个例子中,我们创建了一个Gin的路由引擎,并定义了一个GET路由。来测试文件下载功能,如果一切正常,你的浏览器应该会开始下载。然后,你可以创建一个Go文件,例如。的文件,文件内容就是。原创 2024-01-24 16:10:30 · 846 阅读 · 0 评论 -
【Golang】实现简单队列(Queue)数据结构
在计算机科学中,队列是一种特殊的线性数据结构,它遵循FIFO(先进先出)原则。队列中的元素只能从一端(称为队尾或后端)添加,并且只能从另一端(称为队头或前端)移除。这种特性使得队列在许多算法和数据结构中都有广泛的应用,例如操作系统中的任务调度、网络通信中的数据包排队等。在结构体中,我们实现了初始化、入队、出队和获取队列长度的方法。在Go语言中,我们可以使用切片(slice)来实现一个简单的队列。下面是一个示例代码,展示了如何定义一个队列结构体,并实现初始化、入队、出队和获取队列长度的方法。原创 2024-01-18 17:34:15 · 938 阅读 · 0 评论 -
【Golang】二进制字符串与数字相互转换
在本文中,我们将探讨如何使用 Go 语言将十六进制字符串转换为二进制字符串,将不定长整型补码字符串转换为数字,以及如何将 IEEE754 标准的单精度(32位)和双精度(64位)浮点数字符串转换为数字。最后,我们将讨论如何将布尔类型的二进制字符串转换为布尔值。原创 2024-01-12 16:03:41 · 1788 阅读 · 0 评论 -
【Golang】补码二进制字符串转整型
【代码】【Golang】补码二进制字符串转整型。原创 2024-01-11 18:01:58 · 603 阅读 · 1 评论 -
【Golang】十六进制字符串转二进制字符串
【代码】【Golang】十六进制字符串转二进制字符串。原创 2024-01-11 17:47:15 · 883 阅读 · 0 评论 -
【Golang】IEEE754标准二进制字符串转为浮点类型
在计算机科学和计算机工程中,IEEE 754标准定义了浮点数的存储和表示方法。该标准包括单精度(32位)和双精度(64位)两种格式。本文将介绍如何使用Go语言实现32位IEEE 754字符串到浮点数的转换。接下来,我们解析符号位、指数位和尾数位。符号位确定数的正负,指数位确定数的范围,尾数位确定数的精度。,它接收一个32位的二进制字符串作为输入,并返回一个浮点数。该函数首先确定输入字符串的长度,并在必要时进行填充,使其达到32位。输出结果是一个浮点数,它就是我们所求的结果。我们首先定义了一个函数。原创 2024-01-11 17:45:57 · 960 阅读 · 1 评论 -
【Golang】MongoDB批量更新插入操作
本文将通过一个实际的Go语言示例,介绍如何在MongoDB中进行批量插入和更新操作。我们将使用MongoDB的官方Go驱动,实现一个简单的批量写入接口,并在实际应用中展示如何进行数据的更新和插入。原创 2024-01-05 09:44:57 · 1115 阅读 · 1 评论 -
【Golang】Mongo数据库增删改查操作
本文将通过一个简单的 Go 语言示例,介绍如何使用 MongoDB 进行基本的数据操作,包括插入、查询、更新和删除操作。我们将使用 MongoDB 的官方 Go 驱动程序来与数据库进行交互。原创 2024-01-03 17:07:55 · 855 阅读 · 1 评论 -
【Golang】Panic程序崩溃恢复
在 Golang 的 Web 项目中,自定义 recovery 中间件是一种常见的做法,用于捕获并处理应用程序的运行时错误,以避免整个应用程序崩溃并返回对应格式的响应数据。很多三方 web 框架(例如 gin、echo)都提供了官方实现的 recovery 中间件,但是官方实现的中间件并不一定能满足自己的需求。例如 gin 官方提供的 recovery 中间件,发生 panic 后会将当前请求的标准状态码置为 500,body 置为空。但是这样的返回数据与格式可能会和自己的项目要求不一致。转载 2023-10-19 13:49:59 · 256 阅读 · 0 评论