- 博客(66)
- 资源 (1)
- 收藏
- 关注
原创 Go语言 依赖管理
在工程代码中,每种语言基本上都有自己的依赖管理工具,比如python的pip、node.js的npm,java的maven,rust的cargo,Go语言也有提供自己的依赖库管理工具。在go1.11之后,Go语言主要使用Go modules对代码依赖进行管理。
2025-11-11 16:41:31
604
原创 Go语言 中的堆--heap
在算法题目中,我们经常遇到需要动态维护一个集合的最值(最大或最小值)的场景,例如找出动态数据流中的第 K 大元素、Dijkstra 算法中的节点松弛操作等。这些场景的共同特点是,我们不仅需要找到当前的最值,还需要高效地添加新元素和删除最值。优先队列 (Priority Queue) 是实现这种操作的理想抽象数据结构,而 堆 (heap) 则是实现优先队列最常用、最高效的具体数据结构。Golang 的标准库 container/heap 提供了一套堆操作的算法。
2025-09-02 13:28:02
592
原创 消息队列相关问题之RocketMQ篇
其中,利用了 NIO 中的 FileChannel 模型将磁盘上的物理文件直接映射到用户态的内存地址中(这种 Mmap 的方式减少了传统 IO,将磁盘文件数据在操作系统内核地址空间的缓冲区,和用户应用程序地址空间的缓冲区之间来回进行拷贝的性能开销),将对文件的操作转化为直接对内存地址进行操作,从而极大地提高了文件的读写效率(正因为需要使用内存映射机制,故 RocketMQ 的文件存储都使用定长结构来存储,方便一次将整个文件映射至内存)。发布者将消息发送到主题中,订阅者在接收消息之前需要先“订阅主题”。
2025-08-10 11:08:37
1016
原创 服务日志、监控
除了应用最广泛的 ELK,还有一些其它的方案比如。日志收集有很多种方案,我们用的是。,一些云厂商也提供了付费方案,比如阿里云的。负责日志数据的可视化分析。提供数据存储和检索能力,负责将日志收集到 ES,
2025-08-10 11:01:55
401
原创 Go语言中的一些问题
Go 语言的字符有以下两种:uint8 类型,或者叫 byte 型,代表了 ASCII 码的一个字符。rune 类型,代表一个 UTF-8 字符,当需要处理中文、日文或者其他复合字符时,则需要用到 rune 类型。rune 类型等价于 int32 类型。var str = "hello 你好" //思考下 len(str) 的长度是多少?//golang中string底层是通过byte数组实现的,直接求len 实际是在按字节长度计算//所以一个汉字占3个字节算了3个长度。
2025-08-07 11:53:00
1078
原创 Go语言 单元测试
单元测试是软件开发中的一种测试方法,旨在验证代码中最小可测试单元(如函数、方法、类)的行为是否符合预期,它是开发流程的重要组成部分。单元测试的目标是发现代码中的缺陷和错误,并确保代码的正确性和稳定性。Go语言中自带有一个轻量级的测试框架testing和自带的go test命令来实现单元测试和性能测试。在包目录内,以_test.go为后缀名的源文件都是go test的一部分,而不是go build的构建部分。
2025-08-06 20:04:13
1066
原创 Go语言 string
字符串(string) 作为 go 语言的基本数据类型,在开发中必不可少,可以说是使用最多的一个数据类型了,凡是涉及到文本处理的地方,我们都会用到字符串。在go语言中,字符串其实就是一串由UTF-8编码的字符序列。接下来看一下官方库对。
2025-08-05 20:01:45
370
原创 Go语言 反射
反射可以认为是程序在运行时的一种能力,反射可以在程序运行时访问、检测和修改它本身状态,比如在程序运行时可以检查变量的类型和值,调用它们的方法,甚至修改它们的值。使用反射可以增加程序的灵活性,简单来说,反射就是程序在运行时能够检测自身和修改自身的一种能力。
2025-08-05 17:17:08
210
原创 Go语言 协程池
Worker:用于执行任务的goroutineTask: 具体的任务Pool: 池子TaskTask有一个函数成员,表示这个task具体的执行逻辑:f func() error // 具体的执行逻辑Pool定义Pool有两个成员,Capacity表示池子里的worker的数量,即工作的goroutine的数量,JobCh表示任务队列用于存放任务,goroutine从这个JobCh获取任务执行任务逻辑:RunningWorkers int64 // 运行着的worker数量。
2025-08-05 14:27:37
380
原创 Go语言 定时器
我们常常会有这样的场景:比如到了未来某一时刻,需要某个逻辑或者某个任务执行一次,或者是周期性的的执行多次,有点类似定时任务。这种场景就需要用到定时器,Go语言中也内置了定时器的实现,
2025-08-05 10:36:36
201
原创 Go语言Context
是Go语言中引入的一个标准库接口,其定义如下:这个接口定义了四个方法:主要有以下两种方式创建根context: 从源代码分析和并没有太多的区别,都是用于创建根context,根context是一个空的context,不具备任何功能。但是一般情况下,如果当前函数没有上下文作为入参,我们都会使用创建一个根context作为起始的上下文向下传递。
2025-08-04 22:50:26
184
原创 Go语言select
select是Go语言层面提供的一种多路复用机制,用于检测当前goroutine连接的多个channel是否有数据准备完毕,可用于读或写。Go语言的select语句,是用来起一个goroutine监听多个Channel的读写事件,提高从多个Channel获取信息的效率,相当于是单线程处理多个IO事件,其思想基本相同。
2025-08-04 22:41:06
438
原创 Go语言 并发安全sync
谈到并发或者并行一个绕不开的话题就是进程和线程,弄清楚进程与线程的本质是并发编程的前提,那么究竟什么是进程,什么是线程呢?
2025-08-04 22:00:05
899
原创 Go语言 逃 逸 分 析
一个变量是在堆上分配,还是在栈上分配,是经过编译器的逃逸分析之后得出的“结论”。Go 语言里编译器的逃逸分析:它是编译器执行静态代码分析后,对内存管理进行的优化和简化。在编译原理中,分析指针动态范围的方法被称之为。通俗来讲,当一个对象的指针被多个方法或线程引用时,则称这个指针发生了逃逸。决定一个变量是分配在堆上还是分配在栈上。
2025-08-04 15:22:34
973
原创 Go语言 延 迟 语 句
延迟语句(defer)是Go 语言里一个非常有用的关键字,它能把资源的释放语句与申请语句放到距离相近的位置,从而减少了资源泄漏的情况发生。
2025-08-04 00:34:09
643
原创 Go语言Channel
channel的特点:不要通过共享内存来通信,而要通过通信来实现内存共享。Go 的并发哲学,它依赖 CSP 模型,基于 channel 实现。
2025-08-03 20:01:28
833
原创 GO语言接口
所以,当实现了一个接收者是值类型的方法,就可以自动生成一个接收者是对应指针类型的方法,因为两者都不会影响接收者。但是,当实现了一个接收者是指针类型的方法,如果此时自动生成一个接收者是值类型的方法,原本期望对接收者的改变(通过指针实现),现在无法实现,因为值类型会产生一个拷贝,不会真正影响调用者。当然,上面的说法有一个简单的解释:接收者是指针类型的方法,很可能在方法中会对接收者的属性进行更改操作,从而影响接收者;也就是说,不管方法的接收者是什么类型,该类型的值和指针都可以调用,不必严格符合接收者的类型。
2025-08-03 17:22:05
615
原创 数组与切片
注意,底层数组是可以被多个 slice 同时指向的,因此对一个 slice 的元素进行操作是有可能影响到其他 slice 的。slice 的底层数据就是数组,slice 是对数组的封装,它描述一个数组的片段。的索引2(闭区间)到索引6(开区间,元素真正取到索引5),容量到索引7(开区间,真正到索引6),为5。索引2(闭区间)到索引5(开区间,元素真正取到索引4),长度为3,容量默认到数组结尾,为8。另起炉灶,将原来的元素复制新的位置,扩大自己的容量。,将新的容量将扩大为原始容量的2倍,也就是10了。
2025-08-03 09:39:51
306
原创 Map底层结构与原理
在计算机科学里,被称为相关数组、map、符号表或者字典,是由一组对组成的抽象数据结构,并且同一个 key 只会出现一次。有两个关键点:map 是由key-value对组成的;key只会出现一次。简单说就是最基本的增删查改。map 的设计也被称为 “The dictionary problem”,它的任务是设计一种数据结构用来维护一个集合的数据,并且可以同时对集合进行增删查改的操作。。哈希查找表用一个哈希函数将 key 分配到不同的桶(bucket,也就是数组的不同 index)。
2025-08-02 10:48:36
964
原创 B树、B+树的区别及MySQL为何选择B+树
B树(B-tree)是一种平衡树结构,每个节点可以存储多个键值对,并保持有序。它通过分裂和合并节点来维持平衡,确保所有叶子节点处于同一层。节点结构:每个节点包含多个键值(keys)和指针(pointers)。键值用于搜索,指针指向子节点或数据。度(degree):B树的最小度t(t \geq 2)定义了节点的键数范围。对于一个节点:根节点:至少有1个键(除非树为空)。非根节点:键数在[t-1, 2t-1]之间。指针数:键数加1。高度平衡。
2025-07-21 19:05:38
892
原创 最短路径、最短路径树和最小生成树
用最少的边集将一个图连成任意2点可达,并且这个边集的总长度最小。保证整个拓扑图的所有路径之和最小。通常用Prim算法和kruskal算法求解。从一个指定的顶点出发,计算从该顶点出发到其他所有顶点的最短路径。网络的源点到所有结点的最短路径构成的树。,Floyd算法求解。
2025-07-16 12:17:15
270
原创 go中for range的坑以及解决方案
相信小伙伴都遇到过以下的循环变量的问题,那是因为循环的val变量是重复使用的,即仅有一份。也就是说,每次循环后赋给val的值就会把前面循环赋给val的值替换掉,所以打印出来的值都是最后一次循环赋给val的值。
2024-01-10 12:21:01
1800
3
distpicker.js
2019-12-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅