了解golang的defer
golang 中有一个关键字 defer
,golang 的 defer 语句用于延迟调用。defer 会在当前函数返回之前执行 defer 注册的函数。
在 defer 语句所在的函数退出之前调用。defer 可以代替其它语言中 try…catch… 语句,也可以用来处理释放资源等收尾操作,比如关闭文件句柄、关闭数据库连接等。defer 还能用于 panic 的 recovery。
golang 中有一个关键字 defer
,golang 的 defer 语句用于延迟调用。defer 会在当前函数返回之前执行 defer 注册的函数。
在 defer 语句所在的函数退出之前调用。defer 可以代替其它语言中 try…catch… 语句,也可以用来处理释放资源等收尾操作,比如关闭文件句柄、关闭数据库连接等。defer 还能用于 panic 的 recovery。
最近两年一直在用 hexo 来写博客,第一个认识的 hexo 静态托管类网站记得还是小米运维部的网站 noops.me ,但是时光荏苒,小米的技术博客16年就停更了。hexo 的生态也比较完整,也有很多不错的博客主题,但是这次想着和 hexo 说再见了。
最近总是碰到有人讨论内存逃逸的问题,而且上升到装逼必备的地步,是时候了解一下什么叫内存逃逸了,于是在网上查了一下相关的资料。
介绍 GMP 的文章有很多了,大家应该也粗浅的知道什么G(goroutine)M(Machine)P(Processsor)。相较于 Java 这样的编程语言,我们经常听到一个线程池的概念。线程池就是提前创建若干个线程,如果有任务需要处理,线程池里的线程就会处理任务,处理完之后线程并不会被销毁,而是等待下一个任务。由于创建和销毁线程都是消耗系统资源的,所以当你想要频繁的创建和销毁线程的时候就可以考虑使用线程池来提升系统的性能。
所有的编程语言都有内存的管理办法,这里面分两大类;一类是编程语言提供了手动管理内存的方式,开发者必须自行对内存进行申请和释放,虽然手动管理相对精准,但是编程麻烦且稍有不慎会造成内存泄露和指针乱踩的后果。另一类是由编程语言提供了垃圾收集机制,开发者不需要手动管理内存,这为开发者提供了很大的便利。
但是,垃圾回收的工作机制并不是完美的。
前言: Go 1.18 版本正式推出了,而这个版本最大的亮点则是正式支持泛型。