- 博客(29)
- 收藏
- 关注
原创 Go vendor
博主在编写Go代码时,遇到了这样一个问题:想要修改某个外部包,添加几个函数,而其余功能继续使用,经过调研,发现可以将Go的外部包源码复制到项目本地,对包的代码进行修改,从而达到目的。以下是对Go vendor的介绍。是 Go Modules 提供的一种依赖管理方式,适用于需要离线构建或对依赖有严格控制的场景。然而,随着 Go Proxy 和模块缓存的完善,其使用频率逐渐降低。添加缺失的依赖或移除未使用的依赖。时,应根据项目需求权衡其优缺点。将依赖下载到本地缓存。如果需要显式指定使用。
2024-12-17 21:31:43
745
转载 ProtoBuf 入门教程一:定义消息
我们也可以为消息定义包。定义了一个包:foo.bargo_package选项定义了将包含此文件所有生成代码的包的导入路径。Go 包名将是导入路径的最后一个路径组件。例如,我们的示例将使用“tutorialpb”的包名。****
2024-12-17 21:22:17
84
原创 如何在 Ubuntu 20.04 或 22.04 上安装 Python 3
以下是关于如何在 Ubuntu 20.04 或 22.04 上安装 Python 3 的详细步骤。Python 是一种广泛使用的编程语言,适用于自动化、数据分析、机器学习等领域。Ubuntu 系统通常预装了 Python 3,但如果需要安装或升级到最新版本,可以按照以下方法操作。Ubuntu 的默认存储库通常包含稳定版本的 Python 3。通过以上方法,您可以轻松在 Ubuntu 系统上安装和管理 Python 3。替换为所需的 Python 版本号(例如。这将显示已安装的 Python 3 版本。
2024-12-16 23:57:03
10590
1
原创 布隆过滤器
布隆过滤器是一种空间高效的概率数据结构,主要用于测试一个元素是否属于某个集合。它的设计允许快速查询,但可能会产生假阳性,即可能错误地报告某个元素在集合中,但绝不会漏掉实际存在的元素。布隆过滤器的基本概念空间效率:布隆过滤器使用比传统集合更少的存储空间。它通过一组位和多个哈希函数来实现。假阳性:布隆过滤器可能会错误地表示某个元素在集合中(假阳性),但如果它报告某个元素不在集合中,则该元素一定不在。构造要求:在构建布隆过滤器时,需要预先知道要存储的元素数量(期望容量)和可接受的假阳性率。
2024-12-16 19:00:36
396
原创 Swagger自动文档工具以及gin-swagger的使用
Gin-Swagger 是一个基于 Go 语言的 Gin 框架的中间件,用于自动生成 RESTful API 的文档。它依赖于 Swagger 规范(目前支持 Swagger 2.0),通过解析代码中的注释生成 API 文档,并通过 Swagger UI 提供交互式的文档页面,方便开发者查看和测试 API 接口。它基于 OpenAPI 规范(前身为 Swagger 规范),通过自动化的方式生成交互式 API 文档、客户端 SDK 和服务端代码,从而简化了 API 的开发和维护工作。
2024-12-15 14:06:40
4663
原创 Gin框架中如何使用中间件
在Gin框架中,中间件(Middleware)是一个非常重要的概念,它可以在HTTP请求的生命周期中拦截请求和响应,执行一些通用的逻辑,比如日志记录、身份验证、错误处理等。Gin框架提供了灵活的中间件机制,支持全局中间件、路由组中间件以及局部中间件的使用。Gin框架的中间件机制非常灵活,支持全局、路由组和局部中间件的使用。Gin中的中间件基于“责任链模式”,多个中间件可以串联起来,依次执行。对象,中间件可以访问请求和响应的详细信息,并对其进行操作。注册了一个全局中间件,所有的路由都会执行该中间件。
2024-12-15 13:57:02
3680
原创 Gin框架中的参数校验
标签定义校验规则,从而实现对请求参数的自动校验。这种方式不仅简化了代码逻辑,还提高了代码的可读性和维护性。此外,支持国际化和自定义校验规则的功能,使得Gin框架在参数校验方面更加灵活和高效。Gin框架允许开发者根据业务需求定义自定义校验规则。通过上述代码,校验错误信息可以被翻译为中文,提升用户体验。库,提供了强大的参数校验功能。通过该库,开发者可以在结构体字段上使用。在Gin框架中,参数校验功能主要依赖于。规则,用于校验日期是否晚于当前时间。字段不能为空,否则会返回校验错误。在上述代码中,自定义了一个。
2024-12-15 13:55:28
3312
原创 【LeetCode】148.排序链表
傻瓜爱用笨方法,本着能少动脑子和少写代码的原则,使用Go的标准库,实现链表数组的排序以及重新链接。利用Go标准库函数slices.SortFunc和cmp.Compare快速解决问题。
2024-12-15 00:16:15
3339
原创 【Go基础】Go算法常用函数整理
判断两个切片是否相等:长度相同且所有元素相等。如果长度不同,Equal 返回 false。否则,将按索引递增的顺序比较元素,比较在第一对不相等时停止。空片和零片被视为相等。虽然切片在很多情况下已经足够使用,但如果需要频繁进行插入和删除操作,可以使用。使用 Go 语言编写算法题时,掌握一些常用的函数和用法可以大大提高效率。包提供了堆的实现,常用于 Top K 问题、优先队列等。:返回切片x中的最小值。注意:这个函数在之前的版本里使用。提供了高效的哈希表实现。:返回切片x中的最大值。:反转切片中的元素。
2024-12-13 14:30:20
5029
原创 【Linux】路径查找-path lookup
路径查找是Linux文件系统中一个频繁且重要的操作。通过路径查找,Linux内核能够高效地将用户提供的路径名转换为内核中的dentry结构。路径查找过程中的起始点和挂载点是影响查找结果的两个关键因素,内核通过符号链接和挂载树等机制处理路径中的特殊情况,使得路径查找可以在复杂的文件系统环境中高效、准确地工作。
2024-12-12 10:06:57
4383
原创 【Linux】文件挂载系统-Filesystem mounting
Linux的文件系统挂载机制通过挂载树结构和dentry指针实现了文件系统间的无缝连接和统一管理。在挂载过程中,挂载结构起到了桥梁的作用,使得挂载点和新文件系统根目录间的层级关系得以建立和维护。挂载树不仅确保了文件系统的层次一致性,还提高了路径解析效率和文件访问的性能,是Linux文件系统管理中的关键机制。
2024-12-12 10:05:42
4141
原创 【Linux】dentry介绍
dentry是Linux文件系统中重要的层次管理结构,借助dentry树和Dcache缓存,系统得以高效管理和访问文件路径。通过引用计数管理和动态清理策略,dentry既保证了内存使用的灵活性,又有效提升了文件访问性能。这一机制在Linux的VFS层次中起到了加速路径解析、节省内存资源的重要作用,使得文件系统在面对复杂文件目录结构时仍然能够保持高效的性能表现。
2024-12-11 23:01:40
3918
原创 【Linux】VFS虚拟文件系统介绍
Linux中的VFS通过抽象层统一了多种文件系统的访问接口,实现了文件系统的模块化设计。应用程序不需要了解底层文件系统的类型,所有的文件操作都通过VFS抽象层处理。这种设计不仅增强了系统的灵活性,还使Linux支持多文件系统和挂载操作成为可能,显著提高了系统的易用性和扩展性。
2024-12-11 23:01:02
3934
原创 【gRPC】gRPC基础:初识与安装
与许多RPC系统一样,gRPC是基于定义一个服务,指定一个可以远程调用的带有参数和返回类型的的方法。文件中定义服务并使用任何支持它的语言去实现客户端和服务端,反过来,它们可以应用在各种场景中,从Google的服务器到你自己的平板电脑—— gRPC帮你解决了不同语言及环境间通信的复杂性。参考官方安装链接🔗:https://grpc.io/docs/languages/go/quickstart/参考官方安装链接🔗:https://grpc.io/docs/protoc-installation/
2024-12-06 22:59:00
3973
原创 【Go基础】Go Test
我们可以在net/url包所在的目录声明一个独立的url_test测试包,其中包名的_test后缀告诉go test工具它应该建立一个额外的包来运行测试。如我们所料,上层的net/http包依赖下层的net/url包。也就是说,一个下层包的测试代码导入了上层的包。通过避免循环的导入依赖,外部测试包可以更灵活地编写测试,特别是集成测试(需要测试多个组件之间的交互),可以像普通应用程序那样自由地导入其他包。这样的行为在net/url包的测试代码中会导致包的循环依赖,在Go中是禁止包的循环依赖的。
2024-12-06 11:22:57
3712
原创 【密码学库使用】PBC-for-Go
最近做实验需要用到密码学库PBC(Pairing-Based Cryptography),pbc 包提供了构建基于配对的密码系统的结构。它是围绕 Ben Lynn 编写的基于配对的密码学(PBC)库的封装(且实验使用Go编写,因此介绍一下pbc的go环境安装。强烈推荐使用Linux环境,题主Windows和Mac都曾安装过,但只有Linux可以做到无痛安装。
2024-12-05 23:28:22
3841
原创 【密码学论文阅读】Efficient Searchable Symmetric Encryption for Join Queries
对于一对关于相同表的连接查询,查询条件是相同的公共属性attr∗,在“第一槽”中的属性-值对有匹配记录且具有相同的⟨attr∗, val∗⟩条目时,它揭示了“第二槽”中属性-值对匹配记录的交集。我们注意到,在以下任一场景中,IP泄漏基本上是空的:(a) 连接属性是第一表中的主键或“高熵”键,在这种情况下,它很可能是每个记录取一个独特的值,或者 (b) “第二槽”中的属性-值对共享相同的属性但值不同,在这种情况下,它们不能与相同的记录匹配。JXT也遵循了类似的设计原则,被连接的表的顺序可以影响泄露情况。
2024-12-05 23:04:06
4032
1
原创 【Go常用库】zap 日志库1:基础
能够将事件记录到文件中,而不是应用程序控制台。日志切割-能够根据文件大小、时间或间隔等来切割日志文件。支持不同的日志级别。例如INFO,DEBUG,ERROR等。能够打印基本信息,如调用文件/函数名和行号,日志时间等。
2024-12-04 23:21:06
4730
原创 【Docker】Docker 使用基础
对于Docker用户来说,最好的情况是不需要自己创建镜像。几乎所有常用的数据库、中间件、应用软件等都有现成的Docker官方镜像或其他人和组织创建的镜像,我们只需要稍作配置就可以直接使用。——《每天5分钟玩转Docker容器技术》因此本节直接介绍如何使用现有Docker image,暂时绕过较为复杂的image build环节。
2024-12-04 14:49:45
3843
原创 【Go基础】Linux安装Go环境
首先,访问Go语言的官方网站下载最新版本的Go语言安装包。通常,可以选择适合系统架构的.tar.gz文件。请根据需要替换为最新版本的下载链接。下载完成后,需要将安装包解压到/usr/local目录下。这将会在/usr/local目录下创建一个go目录,里面包含Go语言的所有文件。为了使系统能够找到Go命令,需要将Go的bin目录添加到PATH环境变量中。可以通过编辑~/.profile或~/.bashrc文件来实现。或者,如果编辑的是~/.bashrcgo version如果安装成功,将看到Go的版本信息。
2024-12-03 21:21:31
4440
原创 【Go常用库】viper 配置管理
这遵循上面建立的优先规则;对路径的搜索将级联通过剩余的配置注册表,直到找到为止。例如,给定此配置文件,可以选择将所有或特定的值解析到结构体、map等。访问器方法也接受深度嵌套键的格式化路径。例如,如果加载下面的JSON文件。Viper 可以通过使用路径中的数字来访问数组索引。是在默认值中定义的,Viper 也会找到它。变得未定义,它们被更高优先级的配置级别“隐藏”。如果存在与分隔键路径匹配的键,则将返回其值。已定义(并且可能被覆盖)。被立即值覆盖(通过标志、环境变量、Viper可以通过传入。
2024-12-02 11:30:05
2526
1
原创 使用链表进行大数阶乘
@运用链表进行大数阶乘运用链表进行大数阶乘#include<iostream>using namespace std;struct Nums { //链表结点类定义 int data; //链表结点数据 Nums* lLink,*rLink; //前驱,后继指针 Nums(Nums* left = NULL, Nums* right = NULL) //构造函数 { lLink = left; rLink = rig
2020-10-28 21:27:25
2359
2
【密码学论文阅读】Efficient Searchable Symmetric Encryption for Join Queries
2024-12-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人