Go语言爱好者周刊_第13期

这里记录每周值得分享的 Go 语言相关内容,周日发布。

本周刊开源(GitHub:polaris1119/golangweekly[1]),欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue[2]。

由于今日头条不允许外链,文中链接可以通过文末引用找到,或「了解更多」查看。

鉴于大部分人可能没法坚持把英文文章看完,因此,周刊中会尽可能推荐优质的中文文章。优秀的英文文章,我们的 GCTT 组织会进行翻译。

题图:来自 golangweekly.com

刊首语

字节跳动张一鸣谈「新员工上线系统」

我们鼓励新员工在入职第一周进行代码发布上线,很多公司要经过培训,并且经过考核,在老员工的指导下才能把他的代码放到线上去,可能要一个季度过去了。我们是鼓励放上去的,放上去出错也没有关系,我们只需要出错能够快速回稳,比如出错能快速检查出来,线上有快速的基本的验证工具说他的代码不合格,那么回或者他放上去了,确实通过检测也出现意外,比如 100 次有 1 次,确实造成了服务器宕机了,但没关系,我们希望 1 秒钟之内把服务切回来,我们允许出错,只要错误是能被快速修复的,所以这样我们就可以大胆使用年轻人,大胆让他实践和让他实现他的产品想法,就是他有产品想法不是特别有把握不算很靠谱也可以。

传统的单位可能要写可行性验证报告,然后开研究会讨论。而我们是 70%靠谱就上线,上线看结果,先从 5%的用户试一下这个功能,反馈不好就下线,所以我们鼓励犯错误。我们每天都有上线,每天线上产品都有迭代,每天都能搜到昨天功能改进效果是上升了还是下降了,上升幅度大不大,要不要做下一步的实验。所以容错也是保持灵活的机制。比如航空公司是不容错的,所以每个飞行员可能得非常复杂培训,非常缓慢的上岗流程,但是在我们这种公司不是的,一个非常优秀的毕业生或者毕业一两年的人,如果他基础很好,很快他在一两年就能成为公司的骨干。为什么?因为他有最大的锻炼机会。

这样的公司应该是技术人员向往的公司吧!

资讯

1、Go1.13.3 和 Go1.12.12 小版本发布[3]

北京时间 2019 年 10 月 18 日凌晨 2 点 49,Go team 宣布发布 Go1.13.2 和 Go1.12.11,4 小时后接着发布了 Go1.13.3 和 Go1.12.12。建议升级到 Go1.13.3。

2、TinyGo 0.9.0 发布[4]

此版本增加了对Windows 的实验性支持[5],更新了对 Go 1.13 的支持,改善了许多主板的刷新体验(不再需要按下按钮),并增加了对缓冲通道的支持。还有许多其他较小的更改。

3、Grafana 6.4.3 发布,系统指标监控与分析平台[6]

Grafana 6.4.3 发布了,Grafana 是一个功能丰富的指标标准仪表板和图形编辑器,用于分析和监控 Graphite、Elasticsearch、OpenTSDB、Prometheus 和 InfluxDB。

4、Proxy-Go v8.4 发布[7]

Proxy 是 golang 实现的高性能 http、https、websocket、tcp、udp、socks5 代理服务器,支持正向代理、反向代理、透明代理、内网穿透、TCP/UDP 端口映射、SSH 中转、TLS 加密传输、协议转换、DNS 防污染智能代理、前置 CDN/Nginx 反代、代理连接重定向、API 动态调用上级代理、限速限连接数。同时提供全平台的功能强大的命令行版本和友好易用的 web 控制面板版本。

5、gcsc v0.1.0 发布[8]

gcsc(go config server client) 配置管理平台客户端,此项目基于 gf 框架开发,主要针对配置管理平台gcs[9]项目的客户端实现。

6、gcs v0.1.3 完善客户端适配,Go 配置管理平台[10]

gcs(go config server) 配置管理平台,此项目基于 gf 框架开发,支持项目管理、配置管理、配置发布、项目对比、配置复制,接口获取配置等

7、go-fastdfs 1.3.3 发布,优化集群管理[11]

go-fastdfs 是一个基于 http 协议的分布式文件系统,它基于大道至简的设计理念,一切从简设计,使得它的运维及扩展变得更加简单,它具有高性能、高可靠、无中心、免维护等优点。

8、gRPC 1.24.2 发布[12]

gRPC 是 Google 开源的高性能、通用 RPC 框架,面向移动和 HTTP/2 设计,是由谷歌发布的首款基于 Protocol Buffers 的 RPC 框架。此版本包含细节优化、改进和 bug 修复,详情查看更新说明:https://github.com/grpc/grpc/releases

9、SeaweedFS 1.44 发布[13]

SeaweedFS 是简单,高伸缩性的分布式文件系统,包含两部分:存储数十亿的文件;快速为文件服务。

10、Go 1.14 中 defer 性能再次提升[14]

然而据说 panic/recover 性能变差。按下葫芦浮起瓢?

另外,Go 1.14 增加-d=checkptr选项帮助 Gophe r 检查对unsaft.Pointer的使用是否符合要求:

问答

1、可以用 grpc 的双向流模式当普通的 socket 用吗?[15]

因为需要双向通讯,用 grpc 的双向流比普通 socket 性能差多少?

2、time.AfterFunc 定时器函数如何避免程序重启造成的中断[16]

线上不可避免的会重启进程, 一重启这个定时器就没了, 应该有啥解决办法的吧?

3、Golang 不确定传参[17]

上游传递不确定 的 json ,如何透传给下游业务?

4、结构体中的匿名结构体切片如何初始化呢?[18]

匿名结构体

5、go mod 怎么导入本地其它项目的包?[19]

在做微服务中使用了 grpc,每个微服务都用了 go mod 模式,因为 grpc 在创建 client 时 需要调用在另一个服务里的 pb 包。请问怎么导入啊?

6、如何非侵入式的停止一个 goroutine[20]

我的意思有点类似 kill 它,而不是退出它。

文章

1、为什么要使用 Go module proxy?

Go module proxy 是近几年来 Go 语言最重要的变化之一。为什么会这样呢?是什么让Go module代理如此特别?

2、golang 核心原理-协程栈[21]

每个协程都需要有自己的栈空间,来存放变量,函数,寄存器等信息。所以系统需要给协程分配足够的栈空间。

3、官方博文:Go 1.13 中的错误处理——中文版[22]

权威出品。

4、为什么 Go 的自定义 error 有时候会内存溢出

来自 go tour 上的一道练习题。

5、Go 语言反射的实现原理[23]

反射是 Go 语言比较重要的一个特性之一,虽然在大多数的应用和服务中并不常见,但是很多框架都依赖 Go 语言的反射机制实现一些动态的功能。本文帮你熟悉反射实现原理。

6、如果 map 不是引用变量,那是什么?

Dave 大神的文章,Seekload 翻译。

7、Go 如何解析 json 内部结构不确定的情况

本文是通过组织曾经梳理过的一篇文章和一个问答而成。主要介绍的是关于 Go 如何解析 json 内部结构不确定的情况。

8、Golang 不到 100 行实现一套灵活的 JWT 库[24]

JWT 全 chen JSON Web Tokens 现在被广泛的应用于各种前后端分离的场景,他比传统的 Token Session 方式,更具灵活性。

9、12306 抢票带来的启示:看我如何用 Go 实现百万 QPS 的秒杀系统

笔者专门研究了一下“12306”的服务端架构,学习到了其系统设计上很多亮点,在这里和大家分享一下并模拟一个例子:如何在 100 万人同时抢 1 万张火车票时,系统提供正常、稳定的服务。

10、通过搭建 MySQL 掌握 k8s(Kubernetes)重要概念

上下两篇。通过搭建 MySQL 掌握 k8s(Kubernetes)重要概念(上):网络与持久卷和通过搭建 MySQL 掌握 k8s 重要概念(下):参数配置

开源项目

1、gocache:可扩展的 Go 缓存库,为您带来了许多用于缓存数据的功能[25]

Go + Cache = GoCache,支持 Memcache、Redis 等。

2、Bigslice:Go 中的无服务器集群计算[26]

用于 Go 编程语言的无服务器集群数据处理系统,它公开了可组合的 API,该 API 使用户可以通过一系列调用用户函数的数据转换来表达数据处理任务。

3、Bigmachine:Go 中用于自我管理无服务器计算的库[27]

Bigmachine 提供了一个 API,该驱动程序使驱动程序进程可以形成特定的机器集群,这些机器将用户代码透明地分发到这些机器。

4、sessionup[28]

简单但有效的 HTTP 会话管理和标识包。

5、Harmony:用于与 Discord API 进行交互的强大 Go 模块[29]

Discord[30]是一个受欢迎的聊天应用程序,尤其是在游戏社区中。DiscordGo[31]这是另一个类似的库。

6、progressbar:适用于 Go 应用程序的非常基本的线程安全进度条[32]

一个非常简单的线程安全进度条,它可以在每个操作系统上正常工作。我需要一个用于croc[33]的进度条,而我尝试的所有内容都有问题,所以我又做了一个。为了与操作系统无关,我不打算支持多行输出[34]。

7、Vearch: 用于深度学习向量的高效相似性搜索的分布式系统[35]

架构图:

8、vulcain: 使用 HTTP/2 Server Push 创建高性能且客户端驱动的 REST API[36]

它还提供了一个开源网关服务器,您可以在任何现有的 Web API 上放置它,以立即将其转换为与 Vulcain 兼容的服务器!

9、dapr: 一种可移植的,事件驱动的运行时,用于跨云和边缘构建分布式应用程序[37]

微软开源。

10、wtf: 终端的个人信息仪表板[38]

基于个人终端的仪表板实用程序,旨在显示不经常但非常重要的日常数据。

11、KubeSphere:易于使用的容器平台[39]

KubeSphere[40]是在Kubernetes[41]之上构建的以应用为中心的多租户容器管理平台,支持部署和运行在任何基础设施之上,提供简单易用的操作界面以及向导式操作方式,在降低用户使用容器调度平台学习成本的同时,极大减轻开发、测试、运维的日常工作的复杂度,旨在解决 Kubernetes 本身存在的存储、网络、安全和易用性等痛点。帮助企业轻松应对敏捷开发、自动化运维、应用快速交付、微服务治理、多租户管理、监控日志告警、服务与网络管理、镜像仓库等业务场景。

12、gin-admin: 管理脚手架[42]

基于 Gin + GORM + Casbin + Dig 实现的 RBAC 权限管理脚手架,目的是提供一套轻量的中后台开发框架,方便、快速的完成业务需求的开发。

13、gatekeeper: 不依赖分布式数据库的 API 网关[43]

滴滴出品。使用它可以高效进行服务代理 以及 在线化服务配置并且你无需重启服务器。

14、genji: 在键值存储之上构建的嵌入式 SQL 数据库[44]

支持 Bolt、Badger 等。兼容 database/sql 包。

资源&&工具

1、系列教程:通过测试学习 Go

Go 语言中文网开始连载系列教程:通过测试学习 Go(测试驱动开发)。通过菜单可以查看。

2、学术论文:Go 语言大规模单元测试[45](英文)

PDF 格式下载。

3、100 本最佳编程书籍[46](英文)

是不是最佳自己判断哈。

4、Go.Sed[47]

使用 Go 重写实现 sed。

5、findlock[48]

解析 Go traceback 结果并寻找可能的死锁。

6、refreturn[49]

查找返回引用并引起分配的函数。

7、证明 Go 语言魅力的 10 个开源项目

它们对 Go 有很大的促进作用。

8、Go 语言汇编资料推荐

曹大的:https://github.com/cch123/golang-notes/blob/master/assembly.md

https://lrita.github.io/2017/12/12/golang-asm/

订阅

这个周刊每周日发布,同步更新在Go 语言中文网[50]、[51]和今日头条[52]。

搜索"Go 语言中文网"或者扫描二维码,即可订阅。

文中链接

[1]polaris1119/golangweekly:

[2]提交 issue:/issues

[3]Go1.13.3 和 Go1.12.12 小版本发布:

[4]TinyGo 0.9.0 发布:

[5]Windows 的实验性支持:#windows-native-install-experimental

[6]

Grafana 6.4.3 发布,系统指标监控与分析平台:

[7]

Proxy-Go v8.4 发布:

[8]

gcsc v0.1.0 发布:

[9]

gcs :

[10]

gcs v0.1.3 完善客户端适配,Go 配置管理平台:

[11]

go-fastdfs 1.3.3 发布,优化集群管理:

[12]

gRPC 1.24.2 发布:

[13]

SeaweedFS 1.44 发布:

[14]

Go 1.14 中 defer 性能再次提升:

[15]

可以用grpc的双向流模式当普通的socket用吗?:

[16]

time.AfterFunc 定时器函数如何避免程序重启造成的中断:

[17]

Golang 不确定传参:

[18]

结构体中的匿名结构体切片如何初始化呢?:

[19]

go mod 怎么导入本地其它项目的包?:

[20]

如何非侵入式的停止一个 goroutine:

[21]

golang核心原理-协程栈:

[22]

官方博文:Go 1.13 中的错误处理——中文版:

[23]

Go 语言反射的实现原理:

[24]

Golang不到100行实现一套灵活的JWT库:

[25]

gocache:可扩展的Go缓存库,为您带来了许多用于缓存数据的功能:

[26]

Bigslice:Go 中的无服务器集群计算:

[27]

Bigmachine:Go 中用于自我管理无服务器计算的库:

[28]

sessionup:

[29]

Harmony:用于与 Discord API 进行交互的强大 Go 模块:

[30]

Discord:

[31]

DiscordGo:

[32]

progressbar:适用于 Go 应用程序的非常基本的线程安全进度条:

[33]

croc:

[34]

多行输出:/issues/6

[35]

Vearch: 用于深度学习向量的高效相似性搜索的分布式系统:

[36]

vulcain: 使用 HTTP/2 Server Push创建高性能且客户端驱动的REST API:

[37]

dapr: 一种可移植的,事件驱动的运行时,用于跨云和边缘构建分布式应用程序:

[38]

wtf: 终端的个人信息仪表板:

[39]

KubeSphere:易于使用的容器平台:

[40]

KubeSphere:

[41]

Kubernetes:

[42]

gin-admin: 管理脚手架:

[43]

gatekeeper: 不依赖分布式数据库的 API 网关:

[44]

genji: 在键值存储之上构建的嵌入式 SQL 数据库:

[45]

学术论文:Go 语言大规模单元测试:

[46]

100 本最佳编程书籍:

[47]

Go.Sed:

[48]

findlock:

[49]

refreturn:

[50]

Go语言中文网:

[51]

:?query=Go%E8%AF%AD%E8%A8%80%E4%B8%AD%E6%96%87%E7%BD%91

[52]

今日头条:#mid=77709