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]微信公众号:
推荐阅读
-
天津卓匠科技有限公司召回凤凰牌电动自行车
中据天津市市场监督管理委员会网站9月18日消息,日前,天津卓匠科技有限公司按照《消费品召回管理暂行规定》的要求,主动向天津市市场监督管理委员会报告了召回计划,将自即日起,召回2020年8月1日至2023年1月10日期间制造的凤凰牌TDT1010Z型号电动自行车,涉及数量为2295辆。本次召回范围内的...
-
了解音箱中的分频器
在播放音乐时,由于扬声器单元自身的能力与结构限制,只用一个扬声器难以覆盖全部频段,而如果把全频段讯号不加分配地直接送入高、中、低音单元中去,在单元频响范围之外的那部分“多余讯号”会对正常频段内的讯号还原产生不利影响,甚至可能使高音、中音单元损坏。因为这个原因,设计师们必须将音讯频段划分为几段,不同频...
-
《流言终结者》前主持人格兰特·今原去世
澎湃讯据外媒报道,《流言终结者》前主持人格兰特·今原因患脑动脉瘤逝世,享年49岁。格兰特·今原。本文图片来自网络格兰特·今原1970年10月23日出生于美国洛杉矶,毕业于南加州大学(USC)电气工程专业。他曾在卢卡斯影业工作9年,为THX和工业光魔部门工作。他曾参与《星球大战》前传系列、《黑客帝国》...
-
单片机的烧写原理
我要问的不是如何制作烧写接口。而是,电脑在通过接口向单片机烧写时(此时单片机内没有程序),电脑是如何通过接口访问内部rom的??对应p口怎么就会指向单片机内部rom。有三种方式:1、把单片机当做一个ROM芯片,早期的单片机都是如此。将单片机放在通用编程上编程时,就像给28C256这样的ROM中写程序...