Golang
文章平均质量分 83
灼华十一
楼下冲五年小码农,热爱开源和技术博客。内容图片若有侵权,联系删除。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Golang系列 - 内存对齐
本文将围绕内存对齐展开, 包括字符串、数组、切片等类型header的size大小、内存对齐、空结构体类型的对齐等等内容.原创 2025-04-06 21:35:30 · 911 阅读 · 1 评论 -
Golang语言系列-标准库中的pdq排序(源码分析+实验)
本文将从源代码的角度来分析golang标准库中如何实现的排序,一般来说,为了性能的考虑,标准库中的排序往往混合使用多种排序算法,一般包括插入排序和快速排序。原创 2024-11-24 16:46:01 · 1162 阅读 · 0 评论 -
Golang语言系列-Channel
golang里的channel信道是golang里一个独特的概念,基于消息通信的方式来实现并发控制。信道有两种类型,缓存型和非缓存型,其中缓冲型底层基于循环数组来保存数据,然后基于互斥锁保证并发访问安全。本文将从源码分析的角度验证以上的观点。最后实现golang的信道来实现一个多线程打印问题。原创 2024-11-21 11:04:04 · 1470 阅读 · 0 评论 -
Golang语言系列-哈希表
sync.map底层基于map实现,适用于读多写少的场景,基于以空间换时间和动态调整策略。整体包括两张表,read表和dirty表,前者使用atomic.Pointer指向,所以基于CAS操作并发访问,后者则需要加锁访问,且两张表的value都是atomic.Pointer类型的entry,保证了对于value的访问也可以基于CAS操作访问。原创 2024-11-16 09:59:18 · 1282 阅读 · 0 评论 -
Golang语言系列-数组与切片
数组是每一门编程语言最基本的概念之一,但是在golang里,用到的更多的是切片。切片其实是对数组的包装(结构体),包含指向数组元素的指针和切片的长度和容量。当长度和容量相等情况下,如果还要插入元素,就会引起切片扩容。很多计算机编程语言的动态数组都有扩容的概念,比如C++语言中的vector,Java中的ArrayList,而且扩容规则都类似,一般是小容量下,一次性扩容为原来的两倍,之后扩容为x倍(x一般在1.25到1.5之间)。并且往往这个扩容策略转换阈值和具体的扩容策略都是因不同语言不同版本而不一样的。原创 2024-11-14 14:37:26 · 1004 阅读 · 0 评论 -
Golang语言系列-闭包
闭包,一个相对抽象的词。之前在面试腾讯的时候,就被问到了golang语言中的闭包,以及函数中的函数使用函数中的值是副本还是引用?本文将介绍Golang语言中闭包的概念。其实,在离散数学上面也有闭包的概念,一般指的是对于一个集合上面的某种运算,生成的依然是这个集合中的元素,则称这个集合在这种运算上闭合。如果对于一种运算,存在不闭合的集合,那么一个最小的闭合集合称为这种运算的闭包。这种解释可以很好地对应闭包这个名字。闭包的一个理解就是在函数内部定义的子函数,这个子函数可以访问外部函数定义的变量。原创 2024-10-28 10:13:53 · 396 阅读 · 0 评论 -
Golang语言系列-Yield机制
之前面试腾讯的时候,被问了golang语言一个相对冷门的知识点,就是Yield机制。当时面试官说什么关键字yield,再加上之前有些问题让我联想到了Python,于是我就答了Python里面的Yield机制,Python里面的这玩意一般用来实现协程。实际上,yield不是Golang里面的关键字,而是一种机制,叫做主动放弃CPU,这个在操作系统也是有这个概念的。原创 2024-10-27 18:36:36 · 867 阅读 · 0 评论
分享