文章506
标签266
分类65
【翻译】Go内存模型

【翻译】Go内存模型

控制Goroutine数量的方法

控制Goroutine数量的方法

在我们写代码的时候,经常会有批量创建任务并等待返回的场景;此时使用生产消费者并发的提交任务来代替for循环逐个执行任务能够大大提高代码效率;

然而不加限制的创建Goroutine也是会有内存溢出、CPU切换过多等资源浪费的情况;

本文讲述了Go中一些常用的控制Goroutine数量的方法;

源代码:


在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服务