技术之外

这篇文章主要来讲一下怎么做动画。

其实只要掌握几个核心的要点,就可以学会怎么用 Figma 做动画了。

我们想一下小时候看的那种胶片电影:

胶片电影

阅读全文

哪来里的 goexit?

有同学在用 dlv 调试时看到了令人不解的 goexit:goexit 函数是啥,为啥 go fun(){}() 的上层是它?看着像是一个“退出”函数,为什么会出现在最上层?

其实如果看过 pprof 的火焰图,也会经常看到 goexit 这个函数。

阅读全文

初始 ast 的威力

抽象语法树是编译过程中的一个中间产物,一般简单了解一下就行了。但我们可以把 Go 语言的整个 parser 和 ast 包直接拿来用,在一些场景下有很大的威力。

什么是 ast 呢,我从维基百科上摘录了一段:

在计算机科学中,抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。

阅读全文

如何用汇编打同事的脸

今天介绍几个常用的查看 Go 汇编代码、调试 Go 程序的命令和工具,既可以在平时和同事、网友抬杠时使用,还能在关键时刻打他们的脸。

比如,有同事说这段代码:

1
2
3
4
5
6
7
8
9
10
package main

type Student struct {
Class int
}

func main() {
var a = &Student{1}
println(a)
}

阅读全文

迷惑的 goroutine 执行顺序

上一篇文章我们讲了 Go 调度的本质是一个生产-消费流程。

生产端是正在运行的 goroutine 执行 go func(){}() 语句生产出 goroutine 并塞到三级队列中去。

阅读全文

Go 调度的本质

首先抛出本文的结论:Go 调度的本质是一个生产-消费流程。

生产者-消费者

生产者-消费者模型

我们平时用 Go 最爽的一点莫过于用一句 go func(){}() 就启动了一个 goroutine 来并发地执行任务。这比用 C/C++ 启动一个线程并发地去执行任务方便太多。这句代码实际上就生产出了一个 goroutine,并进入可运行队列,等待和 m 来找它从而可以得到运行。

阅读全文