Web Analytics

基于Redis Cluster的分布式锁实现以互斥方式操作共享资源

今天要说的技术方案也是有一定项目背景的。在上一个项目中,我们需要对一个redis集群中过期的key进行处理,这是一个分布式 系统,考虑到高可用性,需要具备过期处理功能的服务有多个副本,这样我们就要求在同一时间内仅有一个副本可以对过期的key>进行处理,如果该副本挂掉,系统会在其他副本中再挑选出一个来处理过期的key。 ...

February 13, 2021 · 15 min · Tony Bai

以单件方式创建和获取数据库实例

在屡次的Go用户调查中,使用Go语言进行Web服务/API开发都占据了Go语言用途调查结果的头部位置。下面是知名Go IDE goland的母公司JetBrains最新发布的Go当前状态报告(2021.2.3)中的截图: 开发Web或API服务,难免会与数据库打交道。如今创建数据库实例并访库的技术已经是很成熟了,于是就有了下面这样的程序结构: ...

February 9, 2021 · 8 min · Tony Bai

Go语言学习技术路线图2021发布了!

上一次与CSDN的合作还要追溯到《程序员》杂志仍然发行的时代(网络发行),最后一次投稿是2017年末的《追求极简:Docker镜像构建演化史》。 今年元旦前,CSDN编辑周翔老师邀请我参与他们策划的“IT人才成长路线图”,合作编写其中的Go语言学习技术路线图。出于让更多开发者学习Go语言、加入Go社区、壮大Go生态的公心考虑以及扩大个人影响力的私心考虑,我接受了邀请。 ...

February 8, 2021 · 3 min · Tony Bai

使用multipart/form-data实现文件的上传与下载

1. Form简介 Form(中文译为表单),是HTML标记语言中的重要语法元素。一个Form不仅包含正常的文本内容、标记等,还包含被称为控件的特殊元素。用户通常通过修改控件(比如:输入文本、选择菜单项等)来“完成”表单,然后将表单数据以HTTP Get或Post请求的形式提交(submit)给Web服务器。 很多初学者总是混淆HTML和HTTP。其实,http通常作为html传输的承载体,打个比方,html就像乘客,http就像出租车,将乘客从一个地方运输到另外一个地方。但显然http这辆出租车可不仅仅只拉html这一个乘客,很多格式均可作为http这辆出租车的乘客,比如json(over http)、xml(over http)。 ...

January 16, 2021 · 15 min · Tony Bai

通过实例理解Go标准库http包是如何处理keep-alive连接的

HTTP是如今互联网的基础协议,承载了互联网上的绝大部分应用层流量,并且从目前趋势来看,在未来10年,http仍然会是互联网应用的主要协议。Go语言自带“电池”,基于Go标准库我们可以轻松建立起一个http server处理客户端http请求,或创建一个http client向服务端发送http请求。 ...

January 8, 2021 · 11 min · Tony Bai

Go语言很无聊…其实它妙不可言![译]

无聊是一种很奇妙的状态,它可以稀释掉人类的一切情感。- 《古董局中局》马伯庸 在GopherCon 2020技术大会上(线上虚拟大会),Jon Bodner为全球gopher们做了主题为“Go Is Boring”的精彩演讲(关注公众号iamtonybai,发送gophercon2020即可得到GopherCon 2020技术大会幻灯片资料)。 ...

January 7, 2021 · 12 min · Tony Bai

Hugo作者、Go核心开发团队成员谈诞生13年的Go语言:生态系统、演化与未来[译]

本文翻译自《Go Language at 13 Years: Ecosystem, Evolution, and Future in Conversation with Steve Francia》。 译注:Go开源于2009年,如果从那时算起,Go才11岁;但在Go核心开发团队眼中,Go的真正诞生年份是2007年,至今13个年头了。关于Go的演化简史可以参见我的专栏文章:《Go语言的前生今世》。 本文要点: Go的简单性让你可以快速上手使用它–你可以在一个下午就消化掉整个Go语言规范; 作者认为Go是当今最好的现代语言之一(其他的还包括:Dart、Flutter和Rust); Go的未来是由它的开源社区决定的,它对所有的功能建议进行讨论和辩论。除非达成明确的共识,否则该功能不会被实现。 社区的规模大约每18个月翻一番。 最初,Go的早期采用者多来自python或ruby等动态语言的开发人员,现在随着语言的成熟,来自Java、.NET和C++程序员也开始接纳并使用Go。 在充满挑战的一年里,社区适应了相互支持,出现了多个meetup,并出现了新的资源。 编程语言的历史只朝着一个方向发展,每一种新的语言的出现都让事情都变得越来越复杂,越来越抽象。然而,就在十几年前,Go在Google诞生了。这种编程语言走的是另外一条路,它把赌注押在了简单和精心的设计和实现上。这个配方一直保留到今天,你可以直接开始写Go代码,没有太大的障碍。当你想到现代软件的大部分流行和可靠的作品都是用Go编写的,比如Docker、Kubernetes、Prometheus等,这就足以让你印象深刻。这个列表还在持续增加。为了了解Go从哪里来,更重要的是它要往哪里去,InfoQ联系了Google负责战略和产品的Go编程语言团队核心成员Steve Francia(译注:他也是知名静态站点生成工具gohugo的作者)。 ...

January 2, 2021 · 16 min · Tony Bai

2020年Go语言盘点:新冠大流行阻挡不了Go演进的步伐

2020,这一六十年一遇的庚子年的确“名不虚传”。在这一年发生了很多事,而最受瞩目的事情莫过于新冠疫情的全球大流行。疫情给全球的经济带来了近似毁灭性的打击,给人们的生命带来了极大威胁,给人们的生活也带来了很大痛苦及不确定性。好在这个糟糕的2020年马上就要过去了!相信此时此刻每个人心中都会有一句呐喊:“2020,快滚吧!”。 ...

December 30, 2020 · 12 min · Tony Bai

如何作废一个已发布的Go module版本,我来告诉你!

Go语言自诞生以来,一路走到今天已经经历了11个年头了。其包依赖管理机制也从无到有,从vendor演化成了如今的Go module。Go module从Go 1.11进入gopher们视野,到目前的Go 1.15,其改进和优化一直在持续。在即将到来的Go 1.16中,Go module将成为默认包依赖管理模式(即默认GO111MODULE=on)。但即便如此,我们在进行go module的实践过程中依然还会遇到一些“棘手”的问题,本文就将针对一个Go module实践中的具体问题做深入描述,并告诉你目前可用的最佳解决方案(也许在go module的后续演进过程中可能会有更好的解决方案或干脆消除掉这个机制上的问题)。 ...

December 26, 2020 · 10 min · Tony Bai

BPF和Go:在Linux中内省的现代方式[译]

本文翻译自马可·凯瓦克(Marko Kevac)的《BPF and Go: Modern forms of introspection in Linux》(https://medium.com/bumble-tech/bpf-and-go-modern-forms-of-introspection-in-linux-6b9802682223)。 每个人都有自己喜欢的关于魔法的书。对于一个人来说是托尔金,对于另一个人来说是普拉切特,对于第三个人来说,比如我,是马克斯-弗雷。今天我要给大家讲的是我最喜欢的IT魔法:BPF以及围绕它的现代基础设施。 ...

December 25, 2020 · 25 min · Tony Bai