自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(76)
  • 收藏
  • 关注

原创 Go-Gin-Example 第九部分 实现redis缓存

首先需要自己安装redis并提前了解相关知识。

2024-04-03 14:35:43 792

原创 Go-Gin-Example 第八部分 优化配置接口+图片上传功能

这里基本是对底层代码的二次封装,为了更灵活的处理一些图片特有的逻辑,并且方便修改,不直接对外暴露下层。而在实践里的话肯定是本地搭建了,更多内容可以查看源码进行学习,到这里可以自行进行验证,访问。在这里为止,针对本需求的配置优化就完毕了,你需要执行。本次需求中,需要增加图片的配置项,总体就有些冗余了。路径映射到我们指定的文件目录中,这里为。将散落在其他文件里的配置都删掉,统一在。对图片进行加密,防止图片名暴露。本身对此就有很好的支持,而。,即我们放置图片的文件夹下。(建立setting模块)

2024-03-26 14:49:23 1836

原创 Go-Gin-Example 第七部分 定制GORM CallBacks 实现软删除

这里我们就与gorm自带的gorm.model一致了,最后的deletedon就是为了软删除设置的。到这里,大家可以进行自行进行删除操作,查看deletedOn字段是否存在删除时的时间戳。使用新建文章或包含这两个字段的表格,可以看到这两个字段功能都正常。本身是由回调驱动的,所以我们可以根据需要完全定制。中都设置这两个方法,为了避免出现更多的表而再次。,这里有两个涉及以下字段的表,我们在两个。上面我们定义好回调方法,这一部分我们将其。当然,如果您的模型包含了一个。函数中,增加以下删除的回调。

2024-03-19 17:49:31 886 2

原创 GO-Gin-Example 第六部分 将Golang应用部署到Docker

这里多出的一句是将宿主机的目录/home/wang2/docker_rep,挂载到容器的/var/lib/mysql,即mysql默认存储数据的位置,完成数据持久化。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的 Linux 主机。,如果不存在会自动创建,首次出现,为进入容器后默认的工作目录,不需要cd。这里即相当于在创建的容器的工作目录中编译当前文件夹内的go文件,

2024-03-19 00:42:53 1005

原创 GO sync.pool学习笔记

是 Go 语言标准库中提供的一个对象池,用于管理临时对象的分配和重用,以减少内存分配的开销。提供了一种简单而有效的方式来管理临时对象,减少了频繁创建和销毁对象所带来的性能开销。这样,对象就被归还到了对象池中,供下一次使用。字段的值,该函数用于生成新的对象。在上面的示例中,我们创建了一个。在这里,我们将获取的对象断言为。类型的返回值转换为期望的类型。注意,需要通过断言将。,并指定了一个匿名函数作为。

2024-03-14 16:35:28 511

原创 [Golang]K-V存储引擎的学习 从零实现 (RoseDB mini版本)

对的学习,从零实现一个k-v存储引擎原项目的github地址为rosedb的mini版本,博主借此了解k-v存储,该项目通过对一个数据文件进行读写以进行简单示意,而非rosedb的多个数据文件的机制,这里也提供rosedb的github地址。

2024-03-14 16:32:52 660

原创 Go-Gin-example 第五部分 加入swagger

Swagger是一款RESTFUL接口的文档在线自动生成+功能测试功能软件。号称世界上最流行的api框架Restful Api文档在线自动生成工具==》api文档和api定义开发。

2024-03-07 21:17:26 964

原创 Go-gin-example 第四部分 重启服务

续接。

2024-03-04 21:29:12 1083

原创 Go-gin-example 第三部分 编写一个简单的文件日志系统

我们自定义的logging包,已经基本完成了,接下来让它接入到我们的项目之中吧。我们打开先前包含log打开routers目录下的article.gotag.goauth.go。2。将log包的引用删除,修改引用我们自己的日志包为。将原本的改为。

2024-03-04 21:26:05 1246

原创 Golang leetcode459 拼接+kmp算法

如果有一个子字符串重复可以构成原字符串,则两个字符串拼接后其中一定包含一个原字符串。abc=s,则s+s=a|bcab|c,其中bca,cab一定不为s。nnn=s,则s+s=nn|nnn|n中也包含一个s。

2024-01-21 20:54:47 567

原创 Golang leetcode28 找出字符串中第一个匹配项的下标 KMP算法详解

因此我们可以对模式字符串建立一个数组,分别记录当第几个开始不对应时,下次从第几个再开始比较,也就是常说的。前缀表是用来回退的,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配。第4个字母不一致,但前三个字母是一致的,那么当我们继续寻找时,没有必要再从第一个字母开始对应。那么,从这里我们又能够发现,下次从第几个数字开始进行比较,只跟这次重复的子串有关系,,也就是以字符串第一个字符作为开头,同时不包括最后一个字符的所有子串,续接我们提到的前后缀的概念,前三个字符为aba,则前缀为。

2024-01-21 17:12:18 1034

原创 Golang 卡码网55 右旋字符串 切片拷贝问题补充

通过[:]的方式进行赋值的方式,如b:=a[:2],由于其共享底层的数组,所以说修改其中之一,另一个也是受影响的,为。切片如果想要实现深拷贝,需要使用**

2024-01-20 13:42:46 660

原创 Go-gin-example 个人注释添加学习版 第三部分 编写一个简单的文件日志

我们自定义的logging包,已经基本完成了,接下来让它接入到我们的项目之中吧。我们打开先前包含log打开routers目录下的article.gotag.goauth.go。2。将log包的引用删除,修改引用我们自己的日志包为。将原本的改为。

2024-01-19 18:28:29 827

原创 Golang leetcode151 翻转字符串中的单词 双指针 常规+进阶

【代码】Golang leetcode151 翻转字符串中的单词 双指针 常规+进阶。

2024-01-17 21:24:32 483 1

原创 Linux shell美化 zsh+oh-my-zsh+power10k

通过如下命令即可进入配置power10k主题,根据自己的喜好选择即可。,使用广泛且兼容性较好,但是这里是完整安装,文件较大。当想重新进行设置时再次输入该命令即可重新配置。一次下载四个字体包,打开进行安装。从ubuntu外观里修改字体即可。进入插入模式,将以上完成后,按。或者第二种方法就为图中的字体。

2024-01-17 13:17:57 737

原创 Go-gin-example 第二部分 jwt验证

作为标准,它没有提供技术实现,但是大部分的语言平台都有按照它规定的内容提供了自己的技术实现,所以实际在用的时候,只要根据自己当前项目的技术平台,到。并且,由于签名是使用标头和有效负载计算的,因此还可以。),它定义了一种紧凑和自包含的方式,用于在各方之间作为JSON对象安全地传输信息。的编写,但是,还存在一些非常严重的问题,例如,我们现在的。的一项功能,因为它的开销很小,并且能够跨不同域轻松使用。是可以随意调用的,这显然还不安全全,在本文中我们通过。结构的(加密处理后的)原始字符串,通过消息认证码(

2024-01-16 00:10:13 1163

原创 Golang 替换数字卡码54题

单引号’',表示byte类型或rune类型,对应int8和int32类型,默认是rune类型。go中string时无法直接修改的,但我们这里采取[]byte进行读取的话则可以针对进行修改。这里我们不在输入获得的[]byte类型上直接修改,而是保存在新建的[]byte上。但在实际使用的过程中,第二部分所需的运行存储反而更多。,起为acm模式的答题。

2024-01-15 20:48:50 517

原创 Golang 三数之和+ 四数之和 leetcode15、18 双指针法

知识补充:map的key值必须是可以比较运算的类型,不可以是函数、map、slice。

2024-01-14 14:24:15 502

原创 JWT的实现原理|一分钟快速了解

作为标准,它没有提供技术实现,但是大部分的语言平台都有按照它规定的内容提供了自己的技术实现,所以实际在用的时候,只要根据自己当前项目的技术平台,到。并且,由于签名是使用标头和有效负载计算的,因此还可以。),它定义了一种紧凑和自包含的方式,用于在各方之间作为JSON对象安全地传输信息。声明格式,,常见的场景如HTTP授权请求头参数和URI查询参数。的一项功能,因为它的开销很小,并且能够跨不同域轻松使用。结构的(加密处理后的)原始字符串,通过消息认证码(是在各方之间安全传输信息的比较便捷的方式。

2024-01-12 12:55:21 860

原创 Golang 四数相加 leetcode454 map哈希表

本题如果直接进行四次for循环,则时间复杂度为O(N^4),超出运行时间限制。因此我们这里使用两个分别的for循环进行遍历,则时间复杂度为O(N。

2024-01-10 16:38:57 595 1

原创 Golang 快乐数 leetcode202 map哈希表 快慢指针法

对于本体中快乐数的检测,如果非快乐数,应该会在循环中有的数出现。当为3位数时,即使为999,每位的平方和仅为243,所以能循环的数肯定是有限的。我们使用map进行数据的记录,当检测到重复时,说明不是快乐数。

2024-01-09 22:57:32 555

原创 Go-gin-example 添加注释 第一部分 新建项目及api编写

Demo 的router.GET等路由规则可以不写在main包中吗?我们发现router.GET等路由规则,在 Demo 中被编写在了main包中,感觉很奇怪,我们去抽离这部分逻辑!import (//创建新的router而不是默认。//定义router的配置//将处理函数搬到这里})})return r修改main.go文件内容import ("fmt""net/http"├── conf├── models├── pkg│ ├── e│ └── util。

2024-01-07 21:26:02 1030

原创 golang leetcode349两个数组的交集 map 双指针+排序

对数组进行排序后,就可以通过双指针的方式从小到大开始比较两个数组。以下两种方法都是采取的这个思路,只是循环的方式不同,复杂度相同。由于golang中没有set,这里算是模拟的一种方式。当然这里也可以用数组来代替map。

2024-01-07 19:03:48 387

原创 Golang leetcode242有效字符异位词 哈希表map 排序

由于题目规定只有26个小写的英文字符,因此我们直接建立26容量的map。

2024-01-07 16:56:02 512

原创 Golang leetcode142 环形链表 暴力map 快慢指针法

的情况:刚进入节点时,慢指针此时在相交节点上,快指针在慢指针前面一个。由于快指针的移动速度为2,慢指针的移动速度为1, 二者相对速度为1。什么如果成环,快指针一定会再慢指针没有转完一圈之前追上满指针?我们可以通过map进行记录,没到新的节点查询是否经过原有节点。若有入环节点,则一定能检测到;若没有,则总会到达最后节点。得到二者一定相遇时,我们如何确定到底哪个节点是入环节点?所以当快指针跟在慢指针后面时有以下几种情况。假设环的长度为n,慢指针走完环的步数为n。入环节点,上两个节点的next相同。

2024-01-06 13:44:02 2175

原创 Golang leetcode160相交链表 map 双指针迭代

则由于两个链表没有公共节点,两个指针也不会同时到达两个链表的尾节点,因此两个指针都会遍历完两个链表,在指针。次之后,两个指针会同时到达两个链表相交的节点,该节点也是两个指针第一次同时指向的节点,此时返回相交的节点。前面陷入思维误区,相交节点之后两个链表是完全一致的,所以我们可以忽略长链表比短链表长的一部分,如果 a=b,则两个指针会同时到达两个链表相交的节点,此时返回相交的节点;,则两个指针会同时到达两个链表的尾节点,然后同时变成空值。,两个指针不会同时到达链表的尾节点,然后指针。

2024-01-04 22:44:35 1050

原创 Golang Leetcode19 删除链表的倒数第N个节点 递归 双指针法+迭代

由于本体是倒数第几个节点,非常适合递归 从终到始 的运行方式。

2024-01-03 17:31:00 479

原创 Golang leetcode24两两交换链表中的节点 递归 迭代

第一次即成功,泪目!!

2024-01-03 10:40:14 513

原创 Golang leetcode206 翻转链表 迭代 递归 双指针

下面的几行代码,我明显是head,下一个就是head->next,由于要反转链表,我的下一个要变成我的上一个,因此head->next->next = head,我的上一个(递归)等到这层递归出去再解决。可以看到newHead在递归结束返回后是没有进行任何操作的,也就是返回的是最底层的那个,起到传递尾(新首)结点的作用。其实在初始时也曾考虑过,最后没有直面的勇气,抽自己两个大嘴巴子,必须醒悟,fuckmyself。链表的操作需要记住三个东西,上一个是谁,我是谁,下一个是谁。

2024-01-01 18:12:57 852

原创 Golang leetcode707 设计链表 (链表大成)

由于在go语言中都为值传递,(注意这里与值类型、引用类型的而区别),所以即使我们直接在方法中传入指针,但是我们在方法里是不能直接修改指针所改的地址,其在方法中只会复制一份副本进行操作,而不会影响到原变量。所以我们这里可以设置一个结构体,在mylinkedlist中在定义链表节点进行解决。这里放一个经典的愚蠢案例以作警戒,妄想通过副本直接影响原链表。题目要求我们通过实现几个方法来完成对链表的各个操作。

2024-01-01 11:05:03 584

原创 golang leetcode203移除链表元素

如果当前节点的值不等于 val,那么我们需要保留这个节点,并将其 next 指针指向递归调用的结果。但在递归中,我们没有直接的方式来访问父节点,因此我们通过返回下一个节点(head.next)来实现这一点。:递归的最终结果是新的链表头节点,它可能与原始链表的头节点不同,尤其是当原始头节点的值等于 val 时。:对于每个节点,调用递归函数处理它的下一个节点(即,调用自身传递 head.next 和 val)。如果是,我们需要删除这个节点,这意味着需要将其父节点(递归中的上一个节点)连接到它的下一个节点。

2023-12-28 18:36:11 771 1

原创 Golang 链表的基础知识

go语言:单链表Val int //数据域Next *ListNode//指针域。

2023-12-23 14:43:49 546

原创 Golang leetcode59 螺旋矩阵

【代码】Golang leetcode59 螺旋矩阵。

2023-12-23 14:00:16 790

原创 Golang leetcode209 长度最小的子数组

利用如下图所示的思想,但是使用的空间太大了。

2023-12-21 16:21:00 521

原创 Golang leetcode977 有序数组的平方 双指针法

这里仍旧有瑕疵,比如我们这里在寻找最小正数时,可以将判断n是否等于L加入到判断条件中,而不使用break。后面的填入数字过程中也可以使用多个if else进行判断,不使用continue。已经想到双指针法,但是对于循环的边界条件仍然找不明白,对于特殊情况没有适应性,很容易出错。而且在更改的过程中喜欢钻牛角尖,不更改现有的惯性思维,后续需要更正这些缺点。

2023-12-20 16:02:19 483 1

原创 Golang 数组 移除元素 双指针法 leetcode27 小记

而go中切片的截取(s[:]和append方法),都是通过修改指向底层的数组的指针实现,对于删除头部和尾部元素的时间复杂度为。由于切片为引用类型,其本质是基于数组完成的,因此我们操作切片可以理解为操作底层的数组。在c中erase函数删除元素是将数组中当前位置后面的元素都向前移动一位,其时间复杂度为。类型:int、float、bool、string、数组、结构体。第一个for循环遍历切片,第二个for循环将部分数组前移。类型:指针、切片、map、管道、接口。,中间元素的删除则同样为。

2023-12-17 21:27:36 498

原创 Golang 二分查找 LEETCODE704 小记

对于二分法的区间定义,可以有闭区间、左闭右开、左开右闭等多种写法,他们的含义是我们寻找的。的元素列表中寻找需要的元素,返回其位置或错误。等带log的复杂度时,可以考虑二分查找法。,逻辑比较简单,但就是写不好。当要求算法的时间复杂度在。二分查找涉及的很多的。与此相关的自然就会产生。

2023-12-17 15:02:57 427

原创 Golang 切片相关笔记

当从切片中删除元素时,如果切片的长度小于容量的 1/4,就会触发切片的缩容机制。新数组的长度通常是原数组长度的一半,但是如果原数组长度小于 1024,新数组的长度等于原数组长度;新数组的长度通常是原数组长度的两倍,但是如果原数组长度小于 1024,新数组的长度会比原数组长度大 1 倍;Go 语言中的切片是一种动态数组,它可以自动扩容和缩容以适应不同的数据量。golang中当向切片中添加元素时,如果切片的容量不足,就会触发切片的扩容机制。切片的扩容会分配一个新的数组,并将原来的元素复制到新数组中。

2023-12-14 11:18:51 536

原创 Golang 链表的创建和读取 小记

在创建的过程中 我们需要设置中间的可变节点,不然我们可能会丢失对链表的第一个节点的索引,以下的例子中我们就使用middle为中间节点;将head设置为头节点,并代表完整的链表。链表有时会具有头节点,头节点的指针指向第一个节点的地址,其本身的数据域可以根据自己的选择进行赋值。链表读取时我们需要根据是否具有头节点进行一定的调整,下面是使用。一般如下,即由本身的数据和指向下一个节点的指针构成。的方法,只要还存在num,就更新创建一个新的节点。比较方便[ 虽然前面都没注意:( ],由于节点的定义过程中使用。

2023-12-13 11:40:41 604

原创 VSCode 报错 gopls was not able to find modules in your workspace.

由于在VSCode中打开一个项目时出现如下提示:于是检索其解决办法根据提示我们可以看到这是由于所出的问题,在工作空间找不到相关module,这是VSCode中go插件所依赖附带的,该提供诸如自动完成,转到定义,查找所有引用等语言功能。通过查询GO插件包含信息如下:因此,我们可以通过增加go.mod文件来指明工作空间,如果不想在workspace下生成,就需要用go work命令指明workspace下的哪些mod需要纳入工作区。

2023-12-09 15:55:03 971

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除