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

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

欢迎投稿,推荐或自荐文章/软件/资源等,请提交issue[1]。

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

(题图:华为鸿蒙HDC2019大会)

华为消费者业务CEO余承东在2019-08-09举行的华为开发者大会上介绍,HarmonyOS是“第一个适用于所有场景的基于微内核的分布式操作系统”,它可以运行在智能手机、智能扬声器、计算机、智能手表、无线耳塞、汽车与平板电脑上,其支持的RAM大小从千字节到千兆字节不等。

余承东还指出,新系统最终将支持一系列应用,兼容Linux与Android应用,同时该系统应用程序开发中使用的方舟编译器(ArkCompiler)也将支持Kotlin、Java、JavaScript、C与C++。至于生态,华为表示,之后将向全球开发者开源鸿蒙操作系统,并推动成立开源基金会。

此外,华为表示鸿蒙微内核已经投入商用,用于支付、人脸识别与指纹识别等高安全级别场景,未来华为设备整体都将使用鸿蒙。

据称首个搭载鸿蒙操作系统的设备是即将于明天发布的荣耀智慧屏,届时可以一睹该操作系统的风采。

和Go无关,但这是国人的骄傲,必须作为卷首语!

资讯

1、发布,大型微服务系统管理平台[2]

Istio是一个由谷歌、IBM与Lyft共同开发的开源项目,旨在提供一种统一化的微服务连接、安全保障、管理与监控方式。

2、对Go的提案流程的思考[3](英文)

Go核心开发人员RussCox发布的一系列文章,讨论Go语言提案应该有哪些内容以及如何审核此类提案的过程。

3、和将在8月13日发布[4](英文)

按节奏这个时候该发布了。然而,还有一些问题没解决,具体可以查看该连接:。

而这两个小版本主要解决几个安全问题。在官网专门放置了一个关于安全政策的文档:GoSecurityPolicy[5]。建议大家届时升级到相应的版本,避免一些安全问题。

4、go-arg:Go中基于struct的的参数解析[6]

从本周发布的开始,它也支持子命令(例如gitcheckout之类的结构)。

varargsstruct{Inputstring`arg:"positional"`Output[]string`arg:"positional"`Verbosebool`arg:"-v"help:"verbositylevel"`Datasetstring`help:"datasettouse"`Optimizeint`arg:"-O"help:"optimizationlevel"`}(args)

输出

$./example-hUsage:[--verbose][--datasetDATASET][--optimizeOPTIMIZE][--help]INPUT[OUTPUT[OUTPUT]]Positionalarguments:INPUTOUTPUTOptions:--verbose,-vverbositylevel--datasetDATASETdatasettouse--optimizeOPTIMIZE,-OOPTIMIZEoptimizationlevel--help,-hprintthishelpmessage
问答

1、什么实例的Kind为interface?[7]

确实不常见,但也不是没有,比如:

packagemainimport("fmt""io""os""reflect")funcmain(){=:=(r).Elem()(rv,(),().Kind())}

2、为什么go语言的slice内部函数那么少?[8]

1)作为一个新手,我认知的go的slice函数只有app以及切片,比如查找等方法并没有,为什么不去设计更多的内部函数呢?2)有没有实现了实现slice更多方法的package?

可以着重看「波罗学」的回答。

3、gorilla/websocket包中的Upgrade第三个参数怎么用的?[9]

这个包比官方的WebSocket包还受欢迎,写WebSocket功能必备!

4、如何去掉float小数点后多余的0?[10]

可能会是这样的场景:商品展示给用户的价格希望是类似这样的9.8、9,而不是9.80、9.00,这应该是这个问题的目的。

文章

1、GCTT出品|深度剖析Go中的Go协程(goroutines)--Go的并发

2、Go爬虫之Colly从入门到不放弃指南[11]

Colly是Go实现的比较有名的一款爬虫框架(GitHub上star8k+),而且Go在高并发和分布式场景的优势也正是爬虫技术所需要的。它的主要特点是轻量、快速,设计非常优雅,并且分布式的支持也非常简单,非常易于扩展。

本文结合官方文档,一步步走进Colly的大门。

3、请问有什么缺点?[12]

标准库有三个问题:

•每次GC都回收所有对象,如果缓存对象数量太大,会导致STW1阶段的耗时增加。

•每次GC都回收所有对象,导致缓存对象命中率下降,New方法的执行造成额外的内存分配消耗。

•方法底层有锁,极端情况下,要尝试最多P次抢锁,也获取不到缓存对象,最后得执行New方法返回对象。

这些问题就对的使用提出了要求,不满足时,性能并不会有大幅提升:

•最好是高并发场景。(对应问题3)

•最好两次GC之间的间隔足够长。(对应问题1、2)

版本已经解决了这些问题,期待正式版本的到来!

4、Go小知识之Go中如何使用set[13]

本文介绍Go中两种set的实现原理,并在此基础介绍了对应于它们的两个包简单使用。作者认为,通过这篇文章,Go中set的使用,基本都可以搞定了。

5、面向对象编程的兴衰[14]

•面向对象编程(OOP)并没有消亡。但与过去相比,它确实没有那么普及了。

•事物之间的区别很大程度上是人类的偏见。

•因为面向对象的继承是将事物组织成类,所以它不能很好地模拟现实世界;它只能很好地模拟人类思考现实世界的方式。

•组合优于继承

作者的结论:面向对象是一个很好的工具,值得学习,但今非昔比,我们应该结合实际情况来使用,不适合一味追求。

6、Go2:Experiment,Simplify,Ship[15](英文)中文翻译:,译质量自己判断

我们都正在一起走向Go2的路上,但是,我们都不知道这条路确切位置在哪里,有时甚至不知道这条路的方向。这篇文章讨论了我们如何实际找到并遵循Go2的道路。

7、你确定你会写Dockerfile吗?

如今GitHub仓库中已经包含了成千上万的Dockerfile,但并不是所有的Dockerfile都是高效的。本文将从五个方面来介绍Dockerfile的最佳实践,以此来帮助大家编写更优雅的Dockerfile。如果你是Docker的初学者,恭喜你,这篇文章就是为你准备的。

8、从源码讲解golang内存分配[16]

本文对整体流程进行梳理和阐述,对关键源码进行注释和解释,希望能给对golang感兴趣的伙伴给予一定帮助,如需更具体的了解,可以根据这个大流程进行源码学习。本人也是基于1.12.6版本源码一点点梳理出来的,可能在一些细节上会存在出入,也希望golang大佬们对不足的地方给予指正。

开源项目

1、LinDB:开源分布式时序数据库[17](国人开源)

LinDB是一款开源分布式时序数据库,具有高性能、高可用性和水平扩展性等特性。

提供海量时序数据存储的同时支持跨多数据中心的能力,目前LinDB已经支撑起「饿了么」所有监控数据的存储。这是饿了么团队开源的。

到目前为止,用Go语言实现的时序数据库还真不少。

2、gomodifytags:一个帮助修改Go语言struct字段tags的工具[18]

你应该经常干这样的事情:model中,为每个字段加tag,比如:json:"id",一个个加挺繁琐的。这个工具就是用来解决structtag的添加、编辑或更新的问题,它可以使生活更轻松。该工具支持在终端生成,也可以与Vim,Atom,Emacs和VSCode等集成。

3、go-sundheit:为Go服务提供健康检查的库[19]

一个为golang服务健康状况提供支持的库。它允许您为依赖项和服务本身注册异步运行状况检查,提供公开其状态的运行状况端点(point)以及运行状况指标。

4、lego:一个Let'sEncrypt客户端和ACME库[20]

这是方便免费试用HTTPS证书。虽然现在很多框架都集成了相关的功能,可能你有时候还是需要它。

5、Compress:优化的压缩包[21]

包含gzip,zlib,zip和flate等压缩包,可以作为标准库的替代品。

6、一种监控git仓库并自动pull和push变动的工具[22]

你有这样的需求吗?

资源

1、通过300行Go代码实现一个简单的RPC框架来解释、学习RPC[23]

通过从头开始在Golang中构建一个简单的RPC框架来学习RPC基本构建。

2、Gio在Go中实现了可移植的即时模式GUI程序[24]

Gio程序支持在所有主要平台上运行:iOS/tvOS,Android,Linux(Wayland),macOS,Windows和浏览器(Webassembly/WebGL)。

对GUI感兴趣的,可以研究研究,看看API、。

3、贪吃蛇golang实现(270行代码)[25]

完整代码:,对此有兴趣的可以研究一下。

4、Go语言后端相关技术的资源[26]

国人整理的,持续整理更新中~

5、关于面试/谈Offer/程序员职场生涯等资料合集[27]

内容挺全的,值得收藏,按需阅读。

6、书籍:Go语言源码学习(未完成)[28]

本书内容涵盖整个Go语言的核心源码,这包括但不限于用户端能直接接触的Go运行时runtime、与关键语言特性相关的编译器cmd/compile、诸多重要的标准库sync/reflect/errors等等。在极少数情况下,本书会讨论不同平台下的实现差异,主要以Linux/Darwinamd64,以及中引入的WebAssembly为主。

7、当···时发生了什么?[29]

这个仓库试图回答一个古老的面试问题:当你在浏览器中输入并且按下回车之后发生了什么?

不过我们不再局限于平常的回答,而是想办法回答地尽可能具体,不遗漏任何细节。

8、免费的计算机编程类中文书籍[30]

免费的编程中文书籍索引,欢迎投稿。

•国外程序员在stackoverflow[31]推荐的程序员必读书籍,中文版[32]。

•stackoverflow[33]上的程序员应该阅读的非编程类书籍有哪些?中文版[34]

•github[35]上的一个流行的编程书籍索引中文版[36]

订阅

这个周刊每周日发布,同步更新在Go语言中文网[37]、微信公众号[38]和今日头条[39]。

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

References

[1]提交issue:

[2]发布,大型微服务系统管理平台:

[3]对Go的提案流程的思考:

[4]和将在8月13日发布:!topic/golang-nuts/-Ba7cHufTKc

[5]GoSecurityPolicy:

[6]go-arg:Go中基于struct的的参数解析:

[7]什么实例的Kind为interface?:

[8]为什么go语言的slice内部函数那么少?:

[9]gorilla/websocket包中的Upgrade第三个参数怎么用的?:

[10]如何去掉float小数点后多余的0?:

[11]Go爬虫之Colly从入门到不放弃指南:

[12]请问有什么缺点?:

[13]Go小知识之Go中如何使用set:

[14]面向对象编程的兴衰:

[15]Go2:Experiment,Simplify,Ship:

[16]从源码讲解golang内存分配:

[17]LinDB:开源分布式时序数据库:

[18]gomodifytags:一个帮助修改Go语言struct字段tags的工具:

[19]go-sundheit:为Go服务提供健康检查的库:

[20]lego:一个Let'sEncrypt客户端和ACME库:

[21]Compress:优化的压缩包:

[22]一种监控git仓库并自动pull和push变动的工具:

[23]通过300行Go代码实现一个简单的RPC框架来解释、学习RPC:

[24]Gio在Go中实现了可移植的即时模式GUI程序:

[25]贪吃蛇golang实现(270行代码):

[26]Go语言后端相关技术的资源:

[27]关于面试/谈Offer/程序员职场生涯等资料合集:

[28]书籍:Go语言源码学习(未完成):

[29]当···时发生了什么?:

[30]免费的计算机编程类中文书籍:

[31]stackoverflow:

[32]中文版:

[33]stackoverflow:

[34]中文版:

[35]github:

[36]中文版:

[37]Go语言中文网:

[38]微信公众号:

发布于 2025-04-10
63
目录

    推荐阅读