MIT的Lecture5要求先阅读Go内存模型,这篇文章写的挺好的,所以打算翻译一下;
原文地址:
源代码:
MIT的Lecture5要求先阅读Go内存模型,这篇文章写的挺好的,所以打算翻译一下;
原文地址:
源代码:
在我们写代码的时候,经常会有批量创建任务并等待返回的场景;此时使用生产消费者并发的提交任务来代替for循环逐个执行任务能够大大提高代码效率;
然而不加限制的创建Goroutine也是会有内存溢出、CPU切换过多等资源浪费的情况;
本文讲述了Go中一些常用的控制Goroutine数量的方法;
源代码:
虽然用了比较长时间的Golang,但是还是有很多不懂得地方;比如,最近我才发现,原来通过recover函数拦截的err并不会返回堆栈信息,而是仅仅返回类似于“空指针错误”的信息,基本上没什么用,更没法定位到底是哪行代码发生了panic十分鸡肋;
最后经过查找网上的资料发现,可以通过runtime包获取到堆栈信息;
源代码:
在Golang的v1.17版本中,已经悄悄的加入了对泛型的支持;
在此之前,我们需要在.go2中尝试泛型,现在我们可以直接编写.go格式的文件,然后通过指定-gcflags=-G=3
来编译含有泛型语法的源文件了;
同时,为了防止在体验时污染我们本地开发环境中的Go,采用了在Docker中运行的方式进行实验;
源代码:
在Go中定义方法时可以将方法的接收器声明为值接收器和引用接收器两种;
本文比较清晰的讲述了这两种方式的区别;
源代码:
slides是一个可以在终端将Markdown转换为PPT的库,你甚至可以直接在终端展示PPT的同时执行PPT中的代码片段!
Github地址:
在上一篇文章《高性能分布式ID生成器实现方法总结》中,主要介绍了一些常用的分布式ID生成器;本文在上一篇文章的基础之上,采用Leaf算法结合Go实现双Buffer桶的ID生成器!
源代码:
系列文章:
在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。如在支付、餐饮、酒店等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息,数据库的自增ID显然不能满足需求;特别一点的如订单、骑手、优惠券也都需要有唯一ID做标识。此时一个能够生成全局唯一ID的系统是非常必要的;
本文介绍了业界常见的几种分布式ID的生成方法;
源代码:
系列文章:
Easegress是一个开源的流量编排系统(An all-rounder traffic orchestration system),居官方介绍这个系统通过Raft共识算法(实际上就是etcd)提供了分布式情况下的高可用、可以实现流量API调度、支持高并发高性能场景;
当然在我体验之后发现其实这个系统最特别的地方(与传统Nginx相比)在于Easegress是通过插件的方式直接进行热替换进行的(如果你使用过K8S,对于这种方式应该不会陌生);
本文介绍了Easegress的基本用法;
源代码:
在前面两篇文章中,分别使用Docker-Compose构建了包含Filebeat和不包含Filebeat的ELK版本;
本文在成功构建了ELK服务的基础之上,简单介绍如何在Go项目中集成ELK服务;
源代码:
系列文章: