[返回] [最新] [最热门] [最高评价]

Go泛型是怎么实现的?

Go 1.17中你就可以使用泛型了,可以参考我3月份的文章:Go 泛型尝鲜, 编译的时候需要加-gcflags=-G=3参数,而当前master分支,默认已经支持泛型,不需要加-G=3参数了。

你可以通过下面的步骤尝试go最新分支:

1
2

go get golang.org/dl/gotip
gotip download

编译代码的时候使用gotip替换go命令即可。

随着Go 1.1
...

鸟窝 2021-08-31 18:36 | 查看: 292

2021年Go生态圈rpc框架benchmark

有朋友问,每年年初的时候我会发布一个rpc的框架的大比拼,今年为啥没有了?

有几个原因,一是我去年下半年换了一份工作,熟悉新的业务耗费了很大精力,导致博客文章相对少了,开源的贡献也少了,二是rpcx我自己觉得性能已经很不错了没有想着进一步的优化,所以也没有做相应的benchmark比较。

前几个星期头条的同学推出他们的rpcx框架kitex,据说性能要比rpcx和grpc好很多,加上今年Gop
...

鸟窝 2021-08-03 09:54 | 查看: 318

[译]编程语言内存模型

这是Russ Cox的第二篇Programming Language Memory Models。

如果你已经阅读了前一篇硬件内存模型,以及如果有Java内存模型或者C++内存模型的经验,本文还好理解,如果你没有相关经验,可能阅读起来比较费劲,建议先阅读一下相关的材料。论文有些词句比较难以理解,本人才学疏浅,有翻译不当之处欢迎批评指正。

编程语言内存模型回答了并行程序可以依靠什么行为以便它们的
...

鸟窝 2021-07-14 15:06 | 查看: 122

[译]硬件内存模型

Russ Cox关于内存模型的系列文章之一。这是第一篇 Hardware Memory Models

简介: 童话之终局

很久以前,当每个人都写单线程程序的时候,让程序运行得更快最有效的方法之一是坐下来袖手旁观。下一代硬件和编译器的优化结果可以让程序像以前一样运行,只是速度会更快。在这个童话般的年代,有一个判断优化是否有效的简单测试方法:如果程序员不能区分合法程序的未优化执行结果和优化执行的结
...

鸟窝 2021-07-14 11:23 | 查看: 69

[译]更新Go内存模型

这是Russ Cox的系列论文的第三篇,也是最后一篇: Updating the Go Memory Model。

文章对 官方的Go内存模型做了一些补充和思考。

当前的Go语言内存模型是在2009年编写的,从那以后略有更新。很明显,至少有一些细节我们应该添加到当前的内存这个内存模型中,其中包括对竞态检测器的明确认可,以及关于sync/atomic中的API是如何同步程序的清晰声明。

这篇文
...

鸟窝 2021-07-14 11:04 | 查看: 85

深入Go Module之未说的秘密

正常情况下,我们的go.mod依赖库的版本都是符合语义化版本 2.0.0的版本格式,或者伪版本格式。在前面的文章我没有特别提到一点的事,Go使用服务端提交的日期和commit id生成的伪版本号是符合语义化版本号2.0.0的,因为语义化版本号中规定pre-release以连接号-加一连串以逗号分隔的标识符组成,标识符以字母数字和连接号组成,所以你看到-yyyyMMddhhmmss-comitid包
...

鸟窝 2021-07-06 20:40 | 查看: 69

深入Go Module之go.mod文件解析

昨天在GopherChina 2021大会上分享了《深入Go Module》,干货太多了,接下来的分几篇文章详细介绍下。

现在哪个新编程语言不都是提供库版本工具呢?Java、Python、nonjs、rust都有一套自己的库管理方法和库注册中心,不管它们的叫法如何。Go最初推出来的时候并没有一个库管理方式,而是采用GOPATH的方式,所有的项目都必须放在GOPATH下,不止一次有从其它语言比如J
...

鸟窝 2021-06-29 13:26 | 查看: 358

深入Go Module之讨厌的v2

Go module不但遵循语义化版本规范 2.0.0,而且还更进一步,对语义化版本中的major还还赋予了更深的意义。

v0.X.X: 对于主版本号(major)是0的情况,隐含你当前的API还处于不稳定的状态,新的小版本可能不向下兼容

v1.X.X: 当前的API处于稳定状态,minor的增加只意味着新的feature的增加,API还是向下兼容的

v2.X.X: major的增加意味着AP
...

鸟窝 2021-06-28 12:51 | 查看: 301

使用 Go 实现 lock-free 的队列

队列(queue)是非常常用的一个数据结构,它只允许在表的前端(head)进行出队(dequeue)操作,而在表的后端(tail)进行入队(enqueue)操作。和栈数据结构一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾(tail),进行删除操作的端称为队头(header)。

在并发环境中使用队列,就必须考虑到多线程(多纤程)并发读写的问题,可能存在多个写(入队)操作线程,同时也可
...

鸟窝 2021-06-16 10:34 | 查看: 164

wio terminal 掌机开发板试用报告

周五收到一款矽递科技的arduino开发板wio terminal,与Arduino和MicroPython兼容,基于ATSAMD51的微控制器,具有Realtek RTL8720DN支持的的无线连接,还带有一个240X320的彩色液晶屏,可以做为树莓派的显示器,很方便了。 话说矽递科技是一家专注物联网硬件解决方案的高新技术企业,全球前三的开源硬件供应商,牛逼了,以至于这款产品的英文资料比中文资料
...

鸟窝 2021-06-06 18:10 | 查看: 69

实现无限缓存的channel

Go语言的channel有两种类型,一种是无缓存的channel,一种是有缓存的buffer,这两种类型的channel大家都比较熟悉了,但是对于有缓存的channel,它的缓存长度在创建channel的时候就已经确定了,中间不能扩缩容,这导致在一些场景下使用有问题,或者说不太适合特定的场景。

我为什么突然谈起这个无限缓存的channel呢?主要是我最近在review公司一位同事的代码时,我的某
...

鸟窝 2021-05-15 21:42 | 查看: 223

轻轻松松打印网页并生成pdf文档

chromedp是一个更快更简单的支持Chrome DevTools Protocol协议的Go库,它是目前最流行的headless浏览器库之一,你可以使用它做很多只能通过浏览器才能执行的任务,比如网页截屏、网页渲染测试、下载视频、模拟登录等,今天我介绍它的一个有用而且很简单的功能:为一个网页生成一个pdf格式的截屏,更多的例子你可以查看官方示例chromedp/examples。

首先有一点,
...

鸟窝 2021-05-08 15:26 | 查看: 123

...更多...