03 2022 档案
摘要:Golang语法简洁,但是也会因此带来一些比较难以察觉的坑点 比如以下代码(可直接编译运行): package main import "fmt" type Test struct { test string temp string } func main() { a := []Test{ Test
阅读全文
摘要:堆排序的原理是,利用堆数据结构,通过比较,逐步交换父节点、子节点的数值,每次筛选出一个子堆的最值,遍历完数组的所有子堆,最终得到一个有序序列。 func adjustHeap(nums []int, parent, end int) { child := parent*2 + 1 for child
阅读全文
摘要:递归完成所有元素的快速排序,根据基准值pivot的选取方式不同,有两种实现方案: (1).pivot每次选取第一个元素,这样递归栈的长度是n: func qSort(nums []int) { length := len(nums) if length <= 1 { return } low, hi
阅读全文
摘要:切片的本质是一个连续内存的数组。 切片由以下三个部分组成: 成员空间+当前成员数+最大成员数 当前成员数即为len,最大成员数即capacity(这个属性和字符串末尾的字节个数类似),使用len的原因是为了防止切片成员发生越界。 切片是长度可变的,因此在成员数增加的过程中会发生扩容,具体的判断规则如
阅读全文
摘要:C语言没有原生的字符串类型,当需要表示字符串时,通常采用char*或char数组,字符串的末尾以'\0'结尾,编译器从头到尾扫描,遇到'\0'时,就认为字符串结束。 在Golang当中,字符串是一个不可修改的UTF-8序列,字符串的末尾也有特定的标识符——即当前字符串的字节个数。 简要对比如下: 对
阅读全文
摘要:Golang通过遍历程序的所有对象,发现当前没有被引用的对象,来将这些资源进行GC,在Go1.8版本后的GC机制,主要采用三色标记法+混合写屏障。 三色用于标记要进行GC的资源对象,分别为: 白色(当前没有遍历到,或程序没有使用到的对象) 灰色(当前遍历到的对象) 黑色(遍历结束,确认程序会使用到的
阅读全文