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

点击上方蓝色“Go语言中文网”关注我们,领全套Go资料,每天学习 Go 语言

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

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

由于微信不允许外链,文中链接可以通过文末引用找到,或「阅读原文」查看。

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

Go语言爱好者周刊:第 13 期_第1张图片

题图:来自 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语言爱好者周刊:第 13 期_第2张图片

另外,Go 1.14 增加-d=checkptr选项帮助 Gophe r 检查对unsaft.Pointer的使用是否符合要求:https://go-review.googlesource.com/c/go/+/162237

问答

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 语言最重要的变化之一。为什么会这样呢?是什么让Go module代理如此特别?

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

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

Go语言爱好者周刊:第 13 期_第3张图片

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

权威出品。

4、

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

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

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

6、

Dave 大神的文章,Seekload 翻译。

7、

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

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

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

9、

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

10、

上下两篇。

开源项目

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]

Go语言爱好者周刊:第 13 期_第4张图片

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

架构图:

Go语言爱好者周刊:第 13 期_第5张图片

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

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

Go语言爱好者周刊:第 13 期_第6张图片

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

微软开源。

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

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

Go语言爱好者周刊:第 13 期_第7张图片

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

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

Go语言爱好者周刊:第 13 期_第8张图片

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

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

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

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

Go语言爱好者周刊:第 13 期_第9张图片

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 有很大的促进作用。

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 语言中文网"或者扫描二维码,即可订阅。

Go语言爱好者周刊:第 13 期_第10张图片

推荐阅读

文中链接

[1]

polaris1119/golangweekly:https://github.com/polaris1119/golangweekly

[2]

提交 issue:https://github.com/polaris1119/golangweekly/issues

[3]

Go1.13.3 和 Go1.12.12 小版本发布:https://studygolang.com/topics/10268

[4]

TinyGo 0.9.0 发布:https://github.com/tinygo-org/tinygo/releases/tag/v0.9.0

[5]

Windows 的实验性支持:https://tinygo.org/getting-started/windows/#windows-native-install-experimental

[6]

Grafana 6.4.3 发布,系统指标监控与分析平台:https://www.oschina.net/news/110652/grafana-6-4-3-released

[7]

Proxy-Go v8.4 发布:https://www.oschina.net/news/110640/proxy-go-8-4-released

[8]

gcsc v0.1.0 发布:https://www.oschina.net/news/110638/gcsc-0-1-0-released

[9]

gcs :https://github.com/goflyfox/gcs

[10]

gcs v0.1.3 完善客户端适配,Go 配置管理平台:https://www.oschina.net/news/110635/gcs-0-1-3-released

[11]

go-fastdfs 1.3.3 发布,优化集群管理:https://www.oschina.net/news/110633/go-fastdfs-1-3-3-released

[12]

gRPC 1.24.2 发布:https://www.oschina.net/news/110538/grpc-1-24-2-released

[13]

SeaweedFS 1.44 发布:https://www.oschina.net/news/110537/seaweedfs-1-44-released

[14]

Go 1.14 中 defer 性能再次提升:https://go-review.googlesource.com/c/go/+/190098

[15]

可以用grpc的双向流模式当普通的socket用吗?:https://segmentfault.com/q/1010000020729334

[16]

time.AfterFunc 定时器函数如何避免程序重启造成的中断:https://segmentfault.com/q/1010000020721814

[17]

Golang 不确定传参:https://segmentfault.com/q/1010000020706635

[18]

结构体中的匿名结构体切片如何初始化呢?:https://studygolang.com/topics/10263

[19]

go mod 怎么导入本地其它项目的包?:https://segmentfault.com/q/1010000020696591

[20]

如何非侵入式的停止一个 goroutine:https://v2ex.com/t/609469

[21]

golang核心原理-协程栈:https://juejin.im/post/5da7385ae51d45782a478d2d

[22]

官方博文:Go 1.13 中的错误处理——中文版:https://tonybai.com/2019/10/18/errors-handling-in-go-1-13/

[23]

Go 语言反射的实现原理:https://draveness.me/golang/basic/golang-reflect.html

[24]

Golang不到100行实现一套灵活的JWT库:https://studygolang.com/articles/24047

[25]

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

[26]

Bigslice:Go 中的无服务器集群计算:https://github.com/grailbio/bigslice

[27]

Bigmachine:Go 中用于自我管理无服务器计算的库:https://github.com/grailbio/bigmachine

[28]

sessionup:https://github.com/swithek/sessionup

[29]

Harmony:用于与 Discord API 进行交互的强大 Go 模块:https://github.com/skwair/harmony

[30]

Discord:https://discordapp.com

[31]

DiscordGo:https://github.com/bwmarrin/discordgo

[32]

progressbar:适用于 Go 应用程序的非常基本的线程安全进度条:https://github.com/schollz/progressbar

[33]

croc:https://github.com/schollz/croc

[34]

多行输出:https://github.com/schollz/progressbar/issues/6

[35]

Vearch: 用于深度学习向量的高效相似性搜索的分布式系统:https://github.com/vearch/vearch

[36]

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

[37]

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

[38]

wtf: 终端的个人信息仪表板:https://github.com/wtfutil/wtf

[39]

KubeSphere:易于使用的容器平台:https://github.com/kubesphere/kubesphere

[40]

KubeSphere:https://kubesphere.io/

[41]

Kubernetes:https://kubernetes.io/

[42]

gin-admin: 管理脚手架:https://github.com/LyricTian/gin-admin

[43]

gatekeeper: 不依赖分布式数据库的 API 网关:https://github.com/didi/gatekeeper

[44]

genji: 在键值存储之上构建的嵌入式 SQL 数据库:https://github.com/asdine/genji

[45]

学术论文:Go 语言大规模单元测试:https://www.academia.edu/40301628/Large_Scale_Unit_Testing_for_Go_Programming_Language_Packages

[46]

100 本最佳编程书籍:https://bookauthority.org/books/best-programming-books

[47]

Go.Sed:https://github.com/rwtodd/Go.Sed

[48]

findlock:https://github.com/napsy/findlock

[49]

refreturn:https://github.com/dominikbraun/refreturn

[50]

Go语言中文网:https://studygolang.com/go/weekly

[51]

微信公众号:https://weixin.sogou.com/weixin?query=Go%E8%AF%AD%E8%A8%80%E4%B8%AD%E6%96%87%E7%BD%91

[52]

今日头条:https://www.toutiao.com/c/user/59903081459/#mid=1586087918877709

你可能感兴趣的:(Go语言爱好者周刊:第 13 期)