Go语言中Interface Nil检查的隐蔽陷阱
在Go语言开发过程中,开发者经常会遇到一个看似简单但实际很容易踩坑的问题:interface变量的nil检查。这个问题的根源在于Go语言中interface的内部实现机制。在开发过程中,我们可能会遇到这样的情况:对一个interface变量进行nil检查通过了,但是在调用其方法时却发生了nil pointer dereference panic。让我们看一个具体的例子...
在Go语言开发过程中,开发者经常会遇到一个看似简单但实际很容易踩坑的问题:interface变量的nil检查。这个问题的根源在于Go语言中interface的内部实现机制。在开发过程中,我们可能会遇到这样的情况:对一个interface变量进行nil检查通过了,但是在调用其方法时却发生了nil pointer dereference panic。让我们看一个具体的例子...
探究了 .net framework 4.8 下的 StringBuilder 及其常见操作实现。StringBuilder 对象代表一个可变字符串,有时我们需要对字符串进行移除,替换,插入字符等操作,但又不想每个操作都产生一个新的子串,在这样的情境下,StringBuilder 就特别有用。StringBuilder 中的完整字符串被表示为由块(Block)组成的链表,每个块都包含一个字符串块(Chunk)。 实际上完整的字符串也可以仅用一个块来表示,这就是 StringBuilder 的主要设计思路。
探究了 .net framework 4.8 下的 LinkedList 及其常见操作实现。LinkedList 的实现符合常见的链表数据结构设计,且 LinkedList 实现的是通用性更强的双向、环状列表,阅读源码的过程更像是指针操作的一次复习。LinkedList提供了完备的节点插入,移除操作,但却都仅仅依赖为数不多的几个内部实现,很有启发性。
探究了 .net framework 4.8 下的dictionary及其常见操作实现
参考版本为 .net framework 4.8
https://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs
List<T>
,实现接口
IList<T>,IReadOnlyList<T>T[] _items
实现,当前已存储的元素个数为
_size
/ Count
,当前容量大小通过
Capacity得到,直接返回数组 _items
的长度。