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]微信公众号:
推荐阅读
-
看了这篇,我确定你已经彻底搞懂Git了
版本控制版本控制就是记录项目文件的历史变化。它为我们查阅日志,回退,协作等方面提供了有力的帮助。版本控制一般分为集中化版本控制和分布式版本控制。集中化主要的版本数据都保存服务端。分布式版本数据分散在多端。GitGit属于分布式版本控制,也是现在比较流行的一种版本管理工具。Git项目有三个区块:工作区...
-
脉冲电路有什么用?特点有哪些?
在电子电路中,电源、放大、振荡和调制电路被称为模拟电子电路,因为它们加工和处理的是连续变化的模拟信号。电子电路中另一大类电路的数字电子电路。它加工和处理的对象是不连续变化的数字信号。数字电子电路又可分成脉冲电路和数字逻辑电路,它们处理的都是不连续的脉冲信号。脉冲电路是专门用来产生电脉冲和对电脉冲进行...
-
碧桂园调整总部架构,成立地产、科技制造集团,为加速多元化铺路?
架构一向稳如泰山的碧桂园总部,最近迎来了一次大规模的重新整队。盖了31年房子后,碧桂园的地产主业被单拎出来成立地产集团,同时将机器人业务和地产业务平行,成立了科技制造集团,“老臣”莫斌和杨国强重点培养的“博士生”程光煜,分头负责地产和科技制造。“5月31日上午,公司开了会,大约到中午2点的时候,发文...
-
不用开胸的“验肺”!冷冻活检术精准“定位”,找出肺疾“真凶”
近日,娄底市中心医院成功开展全市首例支气管镜下冷冻肺活检术,为一名疑难肺部疾病患者明确诊断,为后续精准治疗提供依据。该技术的顺利开展标志着弥漫性肺部疾病、肺外周病变以及其他肺部疑难病的诊断能力迈上新台阶,将为娄底市呼吸疑难病患者带来福音。59岁的郭大哥在十年前便出现咳嗽咳痰、活动后气促的症状,但一直...