博客装修记

选定博客生成系统往往只是打造自己博客的第一步,这里记录了本博客从 hexo 迁移到 hugo 后,后续的功能集成步骤。

迁移博客至Hugo

经过了一段时间的纠结,还是把博客从Hexo迁移到了Hugo

Go 内存分配器的设计与实现[转载]

原文链接 https://mp.weixin.qq.com/s/TO_lmlFbVDgFmns9s_mMzw 程序中的数据和变量都会被分配到程序所在的虚拟内存中,内存空间包含两个重要区域 — 栈区(Stack)和堆区(Heap)。函数调用的参数、返回值以及局部变量大都会被分配到栈上,这部分内存会由编译器进行管理;不同编程语言使用不同的方法管理堆区的内存,C++ 等编程语言会由工程师主动申请和释放内存,Go 以及 Java 等编程语言会由工程师和编译器共同管理,堆中的对象由内存分配器分配并由垃圾收集器回收。 不同的编程语言会选择不同的方式管理内存,本节会介绍 Go 语言内存分配器,详细分析内存分配的过程以及其背后的设计与实现原理。

Golang GC 原理

Go 1.5 以后(截止Golang v1.12)采用了非分代、非紧缩、写屏障、三色标记的原理进行垃圾回收。

kafka学习笔记-搭建基于k8s的kafka测试环境

准备深入的学习下kafka,先从搭建一个开发环境,编写一个简单的测试程序开始吧。

使用coding自动同步和部署Github项目

coding 提供了一套免费的静态页面服务,还可以自定义域名,本人的 airaNg 服务页面也是部署在coding的静态页面服务当中。不过 ariaNg 还会不断更新,如何在 ariaNg 原项目版本升级后自动更新自己部署的在 coding 的页面呢,这里利用 coding 自带的持续集成功能来完成这种自定义的操作。 目前coding的静态页面服务已进行了修改,使用腾讯云的 oss 和 cdn 来部署了,虽然速度和稳定性有了提升,但可能也会产生费用。

Go-Advance 总结

看完了 go-advice, 记录下一些要点和自己值得注意的地方。

range 数组和切片的差异

Go 语言的 range 表达式遵循如下两个规则: range表达式只会在for语句开始执行时被求值一次,无论后边会有多少次迭代 range表达式的求值结果会被复制,也就是说,被迭代的对象是range表达式结果值的副本而不是原值

多个goroutine按既定顺序运行

Golang 中 goroutine 中的运行是无序的,如果要让多个 goroutine 顺序执行,例如每个 goroutine 在并行执行时顺序打印 0-9,这里记录一种通过 atomic 包的原子操作来实现的方法。

别名和类型再定义

Golang 语言中,我们可以用关键字type声明自定义的各种类型。在使用type时,声明的自定义类型有不同的区别。

map中值类型结构体无法赋值

在Golang中,当一个map的value为一个值类型的结构体时,是不能对其赋值的,修改结构体的数值的。