GO语言系列
文章平均质量分 94
IT杨秀才
这个作者很懒,什么都没留下…
展开
-
Go语言的Context妙用
简单来说,Context: 设置被取消的时间,即截止时间;: 返回一个 只读Channel,当Context被取消或者到达截止时间,这个Channel就会被关闭,表示Context的链路结束,多次调用Done方法会返回同一个ChannelDone如果是被取消,返回Canceled如果是超时,返回— 从中获取键对应的值,类似于Map的get方法,对于同一个context,多次调用Value并传入相同的Key会返回相同的结果,如果没有对应的Key,则返回nil,键值对是通过WithValue方法写入的。原创 2024-09-27 15:32:10 · 850 阅读 · 0 评论 -
Go语言的channel选择器:select
select是Go语言层面提供的一种多路复用机制,用于检测当前goroutine连接的多个channel是否有数据准备完毕,可用于读或写。原创 2024-09-26 12:06:29 · 526 阅读 · 0 评论 -
Go语言的Sync,你知道多少
在一文中讲channel的时候,我们说到在Go语言并发编程中,倡导使用通信共享内存,不要使用共享内存通信,goroutine之间尽量通过channel来协作,而在其他的传统语言中,都是通过共享内存加上锁机制来保证并发安全的,同样Go语言也提供了对共享内存并发安全机制的支持,这些功能都存在于sync包下。原创 2024-09-24 17:34:16 · 946 阅读 · 0 评论 -
Go中的channel一般是怎么用的
其实简单来说。原创 2024-09-22 13:20:46 · 784 阅读 · 0 评论 -
Go语言循环的坑,你踩过多少?
Go 1.22之前通过遍历切片取不到所有变量的地址,而是同一个临时变量的地址闭包中的迭代变量:迭代变量在闭包中被捕获,导致所有闭包共享同一个变量。for range会创建元素的副本,直接修改迭代变量不会影响原切片。字典遍历顺序:遍历字典时,顺序是随机的,每次运行可能不同。for range遍历字符串时返回的是Unicode代码点(rune),而不是字节,可能导致多字节字符处理复杂。删除切片元素: 在for range中删除切片元素可能导致意外行为或漏掉某些元素。遍历修改映射(字典):在。原创 2024-09-21 13:47:42 · 703 阅读 · 0 评论 -
Go语言探秘——Map
由于插入了很多元素,在不是完全理想的情况下,肯定会创建一些溢出桶,但是,又由于没有达到负载因子的临界值,所以不会触发扩容,在删除很多元素,这个时候负载因子又会减小,再插入很多元素,会继续创建更多的溢出桶,导致查找元素的时候要去遍历很多的溢出桶链表,性能下降,所以在这种情况下要进行扩容,新建一个桶数组,把原来的数据拷贝到里面,这样数据排列更紧密,查找性能更快。这是因为go在每次开始遍历前,都会随机选择一个桶下标,一个桶内遍历的起点槽下标,遍历的时候从这个桶开始,在遍历每个桶的时候,都从这个槽下标开始。原创 2024-09-20 18:15:54 · 916 阅读 · 0 评论 -
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 · 900 阅读 · 0 评论 -
GO语言defer用法总结
defer顾名思义,延迟。它是go语言中的一个关键字,主要用在函数或方法前面,作用是用于函数和方法的延迟调用,在语法上,defer与普通的函数调用没有什么区别。在使用上非常简单,只需要弄清楚以下几点即可:延迟的函数的什么时候被调用?函数return的时候发生panic的时候延迟调用的语法规则defer关键字后面表达式必须是函数或者方法调用延迟内容不能被括号括起来。原创 2024-09-19 13:26:16 · 923 阅读 · 0 评论