
为了熟练的掌握一门编程语言,人们不得不阅读它的大量的相关资料。但是如果你不理解这些资料介绍的内容,如何能学习更多的资料呢?
在本文中,我将尽可能多地列举Rust代码片段,并解释它们包含的关键字和符号的含义,而不是只关注Rust的一两个概念。
准备好了吗,让我们出发吧!
为了熟练的掌握一门编程语言,人们不得不阅读它的大量的相关资料。但是如果你不理解这些资料介绍的内容,如何能学习更多的资料呢?
在本文中,我将尽可能多地列举Rust代码片段,并解释它们包含的关键字和符号的含义,而不是只关注Rust的一两个概念。
准备好了吗,让我们出发吧!
不管我们是不是有身份的人,我们一定是有身份证的人,身份证上面的号码就是我们的ID,理论上这个ID是全国唯一的,而且通过这个号码,我们还可以得到一些个人信息,比如前两位可以确定我们第一次申请身份证的时候所在的省份、接下来的四位可以确定我们所在的区县,然后还可以知道我们出生的年月以及性别。
在我们的计算机应用中,也处处存在的ID, 比如订单编号、商品ID、微博ID、微信消息ID、书的ISDN号、商品条码等等。通过ID,可以迅速定位到对象实体、为对象之间建立关联、跟踪对象在不同服务之间的流转等等。
有的ID是无意义的唯一的标识,有的ID还能提供额外的信息,比如时间和机房信息等等。为了确保唯一性,有的ID使用很长的字节数,比如256个字节,有的通过递增的long类型,只需要8个字节来表示。考虑到存储、信息包含量、性能、安全等因素,一个好的ID的设计至关重要。
介绍ID生成和分布式的方案的文章已经非常非常多了,比如文末中的参考资料中的文章,所以我在本文中简洁的汇总各个方案的优缺点,然后介绍一个分布式的ID生成器项目rpcxio/did,它可以实现单节点百万级的ID生成。
原文: The Zen of Go。
编写简单、可读、可维护Go代码的十个工程经验, Dave Cheney于2020/02/03在 GopherCon Israel 2020的演讲。
只翻译了小标题
原文: Build your own block_on()。
如果你想搞清楚 future crate中的block_on
是如何工作的,那么今天就让我们写一个自己的block_on
函数。
这篇博文的灵感来自两个crate: wakeful和extreme。 wakeful
设计了一种从函数中创建Waker
的简单方法,而extreme
则是block_on()
的及其简洁的实现。
我们的实现目标将与extreme
略有不同。与其追求零依赖和最少的代码行数,不如追求一个安全高效但仍然非常简单的实现。
我们将使用的依赖项是pin-utils, crossbeam, 和 async-task。
Stjepan Glavina是Rust流行的库Crossbeam的作者,最近一年专注于async-std的开发。他最近写了两篇关于rust异步编程的文章,我翻译成中文,学习一下。
本篇原文是:Blocking inside async code。
以下是翻译:
大家好,很久没写博文了,这次回来感觉真好。首先带来一个好消息。在Crossbeam上花了两年的时间后,2019年我把我的焦点放在了运行时异步编程研究上(比如async-std
和tokio
)。尤其是我想让异步运行时(async runtimes)更有效、更健壮,同时也更简单。
在这篇文章中,我想谈谈所有的运行时都面临的一个有趣的问题:从异步代码中调用阻塞函数。
自人类文明以来,人类交流的方式就在不断的变化,从最早的结绳记事、到烽火传消息,从飞鸽传书到驿站飞马,从电报电话到互联网传送,交流的速度越来越快,信息传输量越来越大。通过交流,人们编写程序的时候就可以实现远程方法调用,就像调用本地方法一样便捷,所以RPC技术也在发展,尤其近几年的微服务的大力推广,RPC技术应用的越来越广泛。
本质上讲,鸿雁传书也是一种RPC调用,只不过速度比较慢,可靠性不是那么高,现在RPC远程方法调用一般直接使用TCP或者HTTP实现。 HTTP的服务暴露方式比较简单,可以采用RESTful的方式提供通用的API, 客户端的调用也比较简单。直接TCP上实现的RPC远程方法调用性能优良,可以用在高吞吐低延迟的场景上。
Go interface代表一组方法的集合,凡是实现这组集合的对象都称之为实现了这个接口,具体的对象不必像其它编程语言比如Java那样必须显示的Implement
某个或者某些接口,所以说Go的接口类型是鸭子类型(Duck type
)。
“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”
- 鸭子测试
当然, 对于一个Go基本入门的开发者来说,这些概念早就深入人心,那么Go是如何实现接口和具体类型的转换的呢?
原文: Our Readers' Top Go Links of 2019。
匆匆又是一年。临近年关,让我们回顾一下Golang Weekly newsletter的数据。
Go新闻周讯吸引了2万九千个开发者阅读,让我们看看2019年他们点击量最多的文章。