有朋友问,每年年初的时候我会发布一个rpc的框架的大比拼,今年为啥没有了?
[译]编程语言内存模型
这是Russ Cox的第二篇Programming Language Memory Models。
如果你已经阅读了前一篇硬件内存模型,以及如果有Java内存模型或者C++内存模型的经验,本文还好理解,如果你没有相关经验,可能阅读起来比较费劲,建议先阅读一下相关的材料。论文有些词句比较难以理解,本人才学疏浅,有翻译不当之处欢迎批评指正。
深入Go Module之未说的秘密
正常情况下,我们的go.mod依赖库的版本都是符合语义化版本 2.0.0的版本格式,或者伪版本格式。在前面的文章我没有特别提到一点的事,Go使用服务端提交的日期和commit id生成的伪版本号是符合语义化版本号2.0.0的,因为语义化版本号中规定pre-release以连接号-加一连串以逗号分隔的标识符组成,标识符以字母数字和连接号组成,所以你看到-yyyyMMddhhmmss-comitid
包含两个连接号,这是正常的。
go要求依赖库要么不包含go.mod,要么依赖库中的go.mod定义的依赖库版本必须以语义化版本 2.0.0格式(或伪版本号)标志(其实更严格,除了+incompatible
不能加meta字段),因为这样我们你能够明确标识某个依赖库确切的版本,这样的版本号被称之为canonical version。
其实main module还可以定义non-canonical version,通过go get或者go mod tidy更新go.mod的时候,命令会尝试更新go.mod,尝试把non-canonical version转变为canonical version版本。
但是,到底有哪些non-canonical version呢?我还没看到官方文章介绍,本文尝试整理这些non-canonical version。
[译]硬件内存模型
Russ Cox关于内存模型的系列文章之一。这是第一篇 Hardware Memory Models
深入Go Module之讨厌的v2
Go module不但遵循语义化版本规范 2.0.0,而且还更进一步,对语义化版本中的major还还赋予了更深的意义。
深入Go Module之go.mod文件解析
昨天在GopherChina 2021大会上分享了《深入Go Module》,干货太多了,接下来的分几篇文章详细介绍下。
wio terminal 掌机开发板试用报告
周五收到一款矽递科技的arduino开发板wio terminal,与Arduino和MicroPython兼容,基于ATSAMD51的微控制器,具有Realtek RTL8720DN支持的的无线连接,还带有一个240X320的彩色液晶屏,可以做为树莓派的显示器,很方便了。 话说矽递科技是一家专注物联网硬件解决方案的高新技术企业,全球前三的开源硬件供应商,牛逼了,以至于这款产品的英文资料比中文资料还丰富。
对于硬件相关的领域,我还是一个小白,但是对于物联网或者硬件相关的创客产品,我是非常感兴趣的,这不,拿到这款产品,周末在家就和小朋友一起研究起来。
我给自己的设置的第一个目标就是能写一个hello world的程序,在这款wio terminal显示出来。
实现无限缓存的channel
Go语言的channel有两种类型,一种是无缓存的channel,一种是有缓存的buffer,这两种类型的channel大家都比较熟悉了,但是对于有缓存的channel,它的缓存长度在创建channel的时候就已经确定了,中间不能扩缩容,这导致在一些场景下使用有问题,或者说不太适合特定的场景。
Go sync.Once的三重门
我在极客时间开设的专栏Go 并发编程实战课中,详细介绍了sync.Once
并发原语的实现,对于使用这个原语来说,内容已经足够了,但是还是有些同学愿意深入挖掘更深层的设计,并且提出了一些疑问,所以我再专门写一篇文章, 作为这么专栏的补充吧。