/images/avatar.jpg

Go浅析-内存逃逸

[toc] 一、概述 Go 编译器会尽可能将变量分配到到栈上。但是, 当编译器无法证明函数返回后,该变量没有被引用,那么编译器就必须在堆上分配该变量,以此避免

Go浅析-常见编程操作

使用方法名字符串,调用方法 思路:通过 reflect。 1 2 3 4 5 6 7 8 9 10 11 12 type animal struct { name string } func (a *animal) Eat() { println("animal eat") } func main() { a := animal{"cat"} reflect.ValueOf(&a).MethodByName("Eat").Call([]reflect.Value{}) } 3个 goroutine 按照顺序分别

Go浅析-GMP

[toc] 参考文章: Go语言设计与实现 深入了解 Go 语言与并发编程 从 bug 中学习:六大开源项目告诉你 go 并发编程的那些坑 一、Go 并发机制 Go 的调度器使用 G、M、

Go浅析-WaitGroup

一、结构 WaitGroup 的结构很简单,维护了三个不同的计数,分别是 counter、waiter 和 semaphore: counter 记录了要等待结束的 goroutine 个数; waiter 记录了等

Go浅析-Context

前言:在 Go http包的Server中,每一个请求在都有一个对应的 goroutine 去处理。请求处理函数通常会启动额外的 goroutine 用来访问后端服务,比如数据库和RPC

Go浅析-Atomic

[toc] 一、Atomic 方法 如果去看文档会发现 atomic 的函数签名有很多,但是大部分都是重复的为了不同的数据类型创建了不同的签名,这就是没有泛型的坏处了,