自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 盘点一下Go语言的反射用法

反射可以认为是程序在运行时的一种能力,反射可以在程序运行时访问、检测和修改它本身状态,比如在程序运行时可以检查变量的类型和值,调用它们的方法,甚至修改它们的值。使用反射可以增加程序的灵活性,简单来说,反射就是程序在运行时能够检测自身和修改自身的一种能力。

2024-10-06 18:03:59 1089

原创 自己动手写了一个协程池

Worker:用于执行任务的goroutineTask: 具体的任务Pool: 池子下面看一下各个角色的定义Task:内部有一个函数成员,表示这个task具体的执行逻辑,Taskf func() error // 具体的执行逻辑Pool:有两个成员,Capacity表示池子里的worker的数量,即工作的goroutine的数量,JobCh表示任务队列用于存放任务,goroutine从这个JobCh获取任务并执行任务逻辑,PoolCapacity int64 // goroutine数量。

2024-10-02 16:38:03 432

原创 Go语言的定时器原来是这么用的

在我们项目中,常常会有这样的场景,比如到了未来某一时刻,需要某个逻辑或者某个任务执行一次,或者是周期性的的执行多次,有点类似定时任务。这种场景就需要用到定时器,Go语言中也内置了定时器的实现,timer和ticker。

2024-09-30 17:31:33 549

原创 Go语言的Context妙用

简单来说,Context: 设置被取消的时间,即截止时间;: 返回一个 只读Channel,当Context被取消或者到达截止时间,这个Channel就会被关闭,表示Context的链路结束,多次调用Done方法会返回同一个ChannelDone如果是被取消,返回Canceled如果是超时,返回— 从中获取键对应的值,类似于Map的get方法,对于同一个context,多次调用Value并传入相同的Key会返回相同的结果,如果没有对应的Key,则返回nil,键值对是通过WithValue方法写入的。

2024-09-27 15:32:10 983

原创 Go语言的channel选择器:select

select是Go语言层面提供的一种多路复用机制,用于检测当前goroutine连接的多个channel是否有数据准备完毕,可用于读或写。

2024-09-26 12:06:29 553

原创 Go语言的Sync,你知道多少

在一文中讲channel的时候,我们说到在Go语言并发编程中,倡导使用通信共享内存,不要使用共享内存通信,goroutine之间尽量通过channel来协作,而在其他的传统语言中,都是通过共享内存加上锁机制来保证并发安全的,同样Go语言也提供了对共享内存并发安全机制的支持,这些功能都存在于sync包下。

2024-09-24 17:34:16 965

原创 再说说BASE理论

Base理论是由 eBay 的架构师 Dan Pritchett 在 ACM 上发表的一套分布式设计理论,BASE 理论全称是** "Basically Available, Soft state, Eventual consistency"**,即 "基本可用,软状态,最终一致性"。它是由CAP 定理逐步演化而来的,是对 CAP 中一致性 C 和可用性 A 权衡的结果。

2024-09-23 22:30:57 994

原创 Go中的channel一般是怎么用的

其实简单来说。

2024-09-22 13:20:46 799

原创 Go语言循环的坑,你踩过多少?

Go 1.22之前通过遍历切片取不到所有变量的地址,而是同一个临时变量的地址闭包中的迭代变量:迭代变量在闭包中被捕获,导致所有闭包共享同一个变量。for range会创建元素的副本,直接修改迭代变量不会影响原切片。字典遍历顺序:遍历字典时,顺序是随机的,每次运行可能不同。for range遍历字符串时返回的是Unicode代码点(rune),而不是字节,可能导致多字节字符处理复杂。删除切片元素: 在for range中删除切片元素可能导致意外行为或漏掉某些元素。遍历修改映射(字典):在。

2024-09-21 13:47:42 732

原创 大名鼎鼎的Cap理论究竟是什么

CAP理论就是是2000 年时,Eric Brewer 教授在 PODC 会议上提出的一套关于分布式系统设计的理论,CAP指出, 在一个分布式系统中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)这三个目标无法同时满足,最多只能同时满足其中的两个。

2024-09-20 21:31:55 654

原创 Go语言探秘——Map

由于插入了很多元素,在不是完全理想的情况下,肯定会创建一些溢出桶,但是,又由于没有达到负载因子的临界值,所以不会触发扩容,在删除很多元素,这个时候负载因子又会减小,再插入很多元素,会继续创建更多的溢出桶,导致查找元素的时候要去遍历很多的溢出桶链表,性能下降,所以在这种情况下要进行扩容,新建一个桶数组,把原来的数据拷贝到里面,这样数据排列更紧密,查找性能更快。这是因为go在每次开始遍历前,都会随机选择一个桶下标,一个桶内遍历的起点槽下标,遍历的时候从这个桶开始,在遍历每个桶的时候,都从这个槽下标开始。

2024-09-20 18:15:54 985

原创 Go语言是怎么管理依赖的

在工程代码中,每种语言基本上都有自己的依赖管理工具,比如python的pipnode.js的npmjava的mavenrust的cargoGo语言也有提供自己的依赖库管理工具。Go语言从v1.5开始开始引入vendor模式,如果项目目录下有vendor目录,那么Go工具链会优先使用vendor内的包进行编译、测试等。在go1.11之后Go语言主要使用go modules对代码依赖进行管理。

2024-09-20 15:12:24 932

原创 GO语言defer用法总结

defer顾名思义,延迟。它是go语言中的一个关键字,主要用在函数或方法前面,作用是用于函数和方法的延迟调用,在语法上,defer与普通的函数调用没有什么区别。在使用上非常简单,只需要弄清楚以下几点即可:延迟的函数的什么时候被调用?函数return的时候发生panic的时候延迟调用的语法规则defer关键字后面表达式必须是函数或者方法调用延迟内容不能被括号括起来。

2024-09-19 13:26:16 990

原创 聊聊到底什么是分布式

分布式系统是相对于单机系统或者是集中式系统的一个概念,再明确分布式系统的概念之前,先来看下集中式系统的定义。

2024-09-19 00:00:40 480

空空如也

空空如也

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

TA关注的人

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