自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 go json反序列化成指定类型

其实主体逻辑在测试用例中,根据json字符串中特定字符串确定是将json串解析成何种子类,逻辑比较简单。

2024-09-07 18:07:25 457

原创 读go语言自制解释器(二)解析ast

nil {return valeval求值的过程如上所示,结合上一节的代码,可以更好的帮助理解代码引用自https://interpreterbook.com/waiig_code_1.7.zip,有兴趣的同学可以去下载全部代码。

2024-09-07 13:48:39 547

原创 读go语言自制解释器(一)生成ast

"IF = "IF""if": IF,ok {return tok词法分析的主要功能就是将从文件中读出来的一个个字符拼接成一个个符合特定意义的token,供后续的语法分析阶段处理(方便生成ast)。以上就是生成ast的介绍了,其实理解了递归下降的解析方式,参照书中,自定义一个小型的语言集,我想大家也都可以实现一个ast解析树吧。

2024-09-07 13:47:44 505

原创 go的父子类的简单使用

可以看到父类的函数被子类给覆盖掉了,类似于这种用法,可以在父类上定义好公共方法(抽象方法)和一些被实现的可以被子类调用的非抽象方法(主要负责数据的校验和处理等逻辑),然后子类自定义实现公共方法,然后调用父类的非抽象方法对数据进行校验和抽离等逻辑。这也应该算是go里面的父子类的一个典型应用吧。

2024-09-03 15:59:29 205

原创 goleveldb的原理简述(基于golang的goleveldb库)

其实就是按图索骥,抓住主要接口和主体逻辑,比如这里图中的open、get、put、delete接口,然后一个个理解相应的代码逻辑,当然也要对lsm-tree原理有所了解。掌握这些之后,基本上很快就可以理解相应的代码逻辑了,不过我这里基于的:golang/leveldb.git是这个版本的代码库,整体逻辑相对简单一点,没有那么多借助于管道通信的操作,比较容易理解,对于理解lsm-tree的基本原理应该是足够了。

2024-09-03 15:58:43 718

原创 git添加秘钥访问github,并同步本地代码到远程仓库

可以通过配置秘钥的方式通过命令行访问gitlab和github。

2024-09-01 00:43:25 194

原创 go boltdb删改版(仅支持增删改查功能)

db.Get()查询数据,db.Put()增改数据,db.Delete()删除数据,db.Commit()用于增、删、改数据之后的后置操作,对b+树及页进行调整操作,详细细节可以参阅代码阅读代码的方法:主体逻辑都在db.go文件中,其他文件都是基于增、删、改、查主体逻辑的扩展。

2024-08-31 23:29:14 527

原创 go boltdb简单解析

阅读源码的时候建议结合测试用例一起进行,然后理解整个bolt的功能就是增删改查,其他就是辅助性的,比如数据的落盘、树的大小调整、页大小的调整等等。

2024-08-31 23:28:24 198

原创 go实现工厂模式(简易版)

这就是简单的工厂的实现,类似于一个工厂,生产出来各式各样实现相同接口的物品。

2024-08-27 19:10:10 188

原创 go mmap使用

【代码】go mmap使用。

2024-08-27 19:08:57 250

原创 go实现时间轮(timewheel)算法(简易版)

时间轮算法(Time Wheel Algorithm)是一种常用于处理定时任务的数据结构和算法。它可以高效地管理和执行一系列定时任务,特别是在需要频繁添加、删除和执行任务时表现良好。时间轮算法主要用于实现定时器功能,比如在操作系统、网络通信、任务调度等领域。

2024-08-19 00:41:32 264

原创 go实现依赖倒置(简易版)

依赖倒置是一种通用的软件设计原则,不要让高层依赖底层,而要让底层依赖高层的抽象。这个是我根据别人的博客里面的概念理解实现的,如有谬误欢迎指出。

2024-08-19 00:40:19 160

原创 go实现状态机(简易版)

有限状态机(英语:finite-state machine,缩写FSM)又称有限状态自动机(英语:finite-state automaton,缩写FSA),简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型。总体定义和实现比较简单,一般状态机结合定时任务或者消息队列触发可能会比较好一点,也可能是手动触发的状态轮转。

2024-08-16 02:43:58 344

原创 go泛型使用

使用起来也没啥难点,就是初写起来比较别扭,习惯了就好了,可以节省很多时间。

2024-08-16 00:57:33 161

原创 go比较两个字节切片大小

go中bytes包下面有用的方法还是挺多的,比如bytes.Buffer是一个字节缓冲区,提供了许多字节slice操作方法的封装,可以加快处理速度(貌似是这样,以后理解深刻了再补充吧)ps:另有strings.compare方法可以比较两个字符串大小,如有需要自取。

2024-08-16 00:56:13 165

原创 golang实现自定义锁

通过上述两种情况的对比可以发现go的锁的实现还是很成功的。

2024-08-04 21:10:48 266

原创 mysql使用event创建定时任务

这两天遇到一个任务,本来说是今天上的,结果挪到了6月份,这个就有点尴尬了,代码做了一些小的调整,从而能够保证适配新老调整,但是突然发现数据也需要到期调整,临时想到了一种方案,就是到时间就运行mysql的定时任务来更新数据,然后到时候我检查一下数据的状态就可以了,这样我就可以在当天稳稳的喝茶了,哈哈,接下来就说说如何创建吧。ON SCHEDULE AT '2020-06-01' --替换为具体的时间戳,而不使用相对时间创建定时任务。--通过这三条指令查看任务创建时指定的时间戳的格式,

2024-08-03 20:43:36 308

原创 golang读写excel

注:f.SetSheetRow("Sheet1", startCell, &data[i]),将sheet的行与一行数据关联起来直接插入即可,不需要调用f.SetCellValue()一个格子一个格子的插入数据,比较麻烦。1、excelize库安装(使用go modules)2、读excel文件。3、写excel文件。

2024-08-03 09:57:06 251

原创 如何阅读源码--关于阅读代码的一些小思考

在阅读代码的时候可以参看别人的阅读方式和理解方式,抓大放小,对于一些细节性的代码先放下,理解主体的代码、调用方式和组织方式。在理解了主体的基础上,阅读代码的时候可以先忽略掉内部的调用关系,在没有注释的时候,一般根据函数名和关键词即可理解了被调用的函数功能,然后在理解了主体函数的功能点后,可以借助ide切入被调用函数,查看其功能如何用代码实现的。最后,如果有时间的话,可以基于自己对代码的理解,写一个小demo(造轮子)来实现相关的功能,加深自己的理解,深化自己的技术体系。

2024-08-03 09:55:46 210

原创 golang实现协程池

go协程池可以看成一个被初始化的固定大小的协程循环读取函数队列,获取是否有可供调用的函数队列,如果有,则协程池中的一个协程调用并执行该函数,talk is cheap,show me the code。好了,整体代码介绍完了,希望你能对协程池有个比较简单的了解,也可以基于此代码,丰富一下逻辑。测试用的代码如下所示。

2024-08-03 09:52:51 493

原创 golang 借助于内置sort.slice包实现排序

golang使用内置sort包实现排序使用sort.Slice()方法实现数组的排序操作系统和开发环境sort.Slice()介绍实现(直接上代码了)运行结果截图使用sort.Slice()方法实现数组的排序使用内置的sort.slice接口实现数组的排序是我目前所知的比较简单的一种排序方式,可以很快的实现数组的排序,个人比较推崇。我所知道的另外一种基于sort包的排序,需要首先写一个结构体...

2019-04-11 09:11:17 32755

空空如也

空空如也

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

TA关注的人

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