在上一篇文章中,我在编译的时候,需要指定一大串的参数,相信你也已经崩溃了吧? 更合理的做法,是将这些参数 Makefile 来管理维护,在 Makefile 中可以用 shell 命令去获取一些 git 的信息,比如下面这样子 #...
Golang 进阶教程
在 Go 中使用 -ldflags 实现动态信息注入
在查看一些工具的版本时,我们时常能看到版本信息非常多,连 git 的 commit id 都有 ~ ➤ docker version Client: Cloud integration: v1.0.22 Version: 20.10.11 API version: 1.41 Go vers...
如何使用 pprof 对 Go 程序进行性能分析?
pprof 是 Go 程序性能分析常用的工具,关于 pprof 有很多的包,它们分别是: runtime/pprof:Go 的内置库,比较基础,不常用 pkg/profile:对 runtime/pprof 进行简化,只需要一行代码即可,等程序运行结束后才...
Go 语言万能的通道编程模型
通道,是 Go 语言的一大特色,初次接触 Go 语言时,着实被他给惊艳到了,它让协程之间的通信变得非常的简单。 简单,意味着灵活,按理说,这是好事啊,可你要知道灵活的另一个潜台词,就是不标准,不同的人,使...
Go 语言中晦涩难懂的寻址问题?有哪些是可导址的?
什么叫可寻址? 可直接使用 & 操作符取地址的对象,就是可寻址的(Addressable)。比如下面这个例子 func main() { name := "iswbm" fmt.Println(&name) // output: 0xc000010200 } 程...
详解 Go 语言中的内存分配规律及逃逸分析
分配内存三大组件 Go 分配内存的过程,主要由三大组件所管理,级别从上到下分别是: mheap Go 在程序启动时,首先会向操作系统申请一大块内存,并交由mheap结构全局管理。 具体怎么管理呢? mheap 会将这一大...
详解 Go 语言中的边界检查
1. 什么是边界检查? 边界检查,英文名 Bounds Check Elimination,简称为 BCE。它是 Go 语言中防止数组、切片越界而导致内存不安全的检查手段。如果检查下标已经越界了,就会产生 Panic。 边界检查使得我们的...