文章374
标签215
分类51
在Golang发生Panic后打印出堆栈信息

在Golang发生Panic后打印出堆栈信息

虽然用了比较长时间的Golang,但是还是有很多不懂得地方;比如,最近我才发现,原来通过recover函数拦截的err并不会返回堆栈信息,而是仅仅返回类似于“空指针错误”的信息,基本上没什么用,更没法定位到底是哪行代码发生了panic十分鸡肋;

最后经过查找网上的资料发现,可以通过runtime包获取到堆栈信息;

源代码:


在Docker中体验Go1.17中的泛型

在Docker中体验Go1.17中的泛型

在Golang的v1.17版本中,已经悄悄的加入了对泛型的支持;

在此之前,我们需要在.go2中尝试泛型,现在我们可以直接编写.go格式的文件,然后通过指定-gcflags=-G=3来编译含有泛型语法的源文件了;

同时,为了防止在体验时污染我们本地开发环境中的Go,采用了在Docker中运行的方式进行实验;

源代码:


一文看懂Go方法中的值接收器和引用接收器

一文看懂Go方法中的值接收器和引用接收器

一个Go实现的终端PPT展示库:slides

一个Go实现的终端PPT展示库:slides

slides是一个可以在终端将Markdown转换为PPT的库,你甚至可以直接在终端展示PPT的同时执行PPT中的代码片段!

Github地址:


在Go中仅使用MySQL实现高性能分布式ID生成器

在Go中仅使用MySQL实现高性能分布式ID生成器

高性能分布式ID生成器实现方法总结

高性能分布式ID生成器实现方法总结

在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。如在支付、餐饮、酒店等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息,数据库的自增ID显然不能满足需求;特别一点的如订单、骑手、优惠券也都需要有唯一ID做标识。此时一个能够生成全局唯一ID的系统是非常必要的;

本文介绍了业界常见的几种分布式ID的生成方法;

源代码:

系列文章:


流量编排系统Easegress初探

流量编排系统Easegress初探

Easegress是一个开源的流量编排系统(An all-rounder traffic orchestration system),居官方介绍这个系统通过Raft共识算法(实际上就是etcd)提供了分布式情况下的高可用、可以实现流量API调度、支持高并发高性能场景;

当然在我体验之后发现其实这个系统最特别的地方(与传统Nginx相比)在于Easegress是通过插件的方式直接进行热替换进行的(如果你使用过K8S,对于这种方式应该不会陌生);

本文介绍了Easegress的基本用法;

源代码:


在Go中集成ELK服务

在Go中集成ELK服务

使用Uber开源的goleak库进行goroutine泄露检测

使用Uber开源的goleak库进行goroutine泄露检测

goroutine 作为 golang 并发实现的核心组成部分,非常容易上手使用,但却很难驾驭得好。我们经常会遭遇各种形式的 goroutine 泄漏,这些泄漏的 goroutine 会一直存活直到进程终结。它们的占用的栈内存一直无法释放、关联的堆内存也不能被GC清理,系统的可用内存会随泄漏 goroutine 的增多越来越少,直至崩溃!

Uber开源了goleak库可以帮助我们检测代码中可能存在的goroutine泄露问题;

源代码:


使用Go打包二进制React单页面应用

使用Go打包二进制React单页面应用

Golang在1.16中加入了embed包,可以将文件直接打包为二进制;除此之外,github的开源库rakyll/statik也提供了类似的功能,并且使用起来也很方便;

本文使用rakyll/statik库,以一个TODO List应用为例,打包了一个二进制的React SPA应用;

源代码: