Golang 使用 Functional Options Pattern 传递参数

在需要传递和初始化校验参数列表的时候使用这种方式来传递配置参数.

Golang 内存逃逸

什么是内存逃逸在一段程序中,每一个函数都会有自己的内存区域存放自己的局部变量、返回地址等,这些内存会由编译器在栈中进行分配,每一个函数都会分配一个栈桢,在函数运行结束后进行销毁,但是有些变量我们想在函数运行结束后仍然使用它,那么就需要把这个变量在堆上分配,这种从"栈"上逃逸到"堆"上的现象就成为内存逃逸。

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

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

Golang GC 原理

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

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为一个值类型的结构体时,是不能对其赋值的,修改结构体的数值的。

[转载]深度解密Go语言之 scheduler

转载至 https://www.cnblogs.com/qcrao-2018/p/11442998.html, 一篇很不错讲解 Golang scheduler 的文章。 在 Go 语言里,go func 是并发的单元,chan 是协调并发单元的机制,panic 和 recover 是出错处理的机制,而 defer 是神来之笔,大大简化了出错的管理。 Goroutines 在同一个用户空间里同时独立执行 functions,channels 则用于 goroutines 间的通信和同步访问控制。

Go 基础知识点

已经专职做了很久的 Python 开发,不过心中对当初带我入行 C 也一直有些留恋。Go 语言的设计和定位和 C 语言有很多共同之处,也融入了很多现代的设计理念,写起来很有当初写 C 的亲切感。准备好好学习下这门语言,这里记录下一些个人觉得重要的基础知识点,随着不断深入再补充。