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

Go语言爱好者周刊:第 3 期这里记录每周值得分享的Go语言相关内容,周日发布。欢迎投稿,推荐或自荐文章/软件/资源等,请提交issue[1]。鉴于大部分人可能没法坚持把英文文章看完,因此,周…

大家好,又见面了,我是你们的朋友全栈君。

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

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

鉴于大部分人可能没法坚持把英文文章看完,因此,周刊中会尽可能推荐优质的中文文章。优秀的英文文章,我们的 GCTT 组织会进行翻译。文中链接较多,微信不可点,可以通过阅读原文查看。

640?wx_fmt=jpeg

(题图:华为鸿蒙 HDC 2019 大会)

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

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

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

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

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

资讯

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

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

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

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

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

按节奏这个时候该发布 Go1.13 了。然而,Go1.13 还有一些问题没解决,具体可以查看该连接:https://github.com/golang/go/labels/release-blocker 。

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

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

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

var args struct {	
    Input    string   `arg:"positional"`	
    Output   []string `arg:"positional"`	
    Verbose  bool     `arg:"-v" help:"verbosity level"`	
    Dataset  string   `help:"dataset to use"`	
    Optimize int      `arg:"-O" help:"optimization level"`	
}	
arg.MustParse(&args)

输出

$ ./example -h	
Usage: [--verbose] [--dataset DATASET] [--optimize OPTIMIZE] [--help] INPUT [OUTPUT [OUTPUT ...]]	

	
Positional arguments:	
  INPUT 	
  OUTPUT	

	
Options:	
  --verbose, -v            verbosity level	
  --dataset DATASET        dataset to use	
  --optimize OPTIMIZE, -O OPTIMIZE	
                           optimization level	
  --help, -h               print this help message

问答

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

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

package main	

	
import (	
    "fmt"	
    "io"	
    "os"	
    "reflect"	
)	

	
func main() {	
    var r io.Reader = os.Stdout	
    rv := reflect.ValueOf(&r).Elem()	
    fmt.Println(rv, rv.Type(), rv.Type().Kind())	
}

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

1)作为一个新手,我认知的go的slice函数只有append以及切片,比如查找等方法并没有,为什么不去设计更多的内部函数呢?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 的并发

Go 协程 (goroutine) 是指在后台中运行的轻量级执行线程,go 协程是 Go 中实现并发的关键组成部分。由于 Go 协程相对于传统操作系统中的线程 (thread) 是非常轻量级的,因此对于一个典型的 Go 应用来说,有数以千计的 Go 协程并发运行的情形是十分常见的。并发可以显著地提升应用的运行速度,并且可以帮助我们编写关注点分离(Separation of concerns,Soc)的代码。

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

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

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

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

标准库 sync.Pool 有三个问题:

•每次GC都回收所有对象,如果缓存对象数量太大,会导致STW1阶段的耗时增加。•每次GC都回收所有对象,导致缓存对象命中率下降,New方法的执行造成额外的内存分配消耗。•Pool.Get方法底层有锁,极端情况下,要尝试最多P次抢锁,也获取不到缓存对象,最后得执行New方法返回对象。

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

•最好是高并发场景。(对应问题 3)•最好两次GC之间的间隔足够长。(对应问题1、2)

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

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

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

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

•面向对象编程(OOP)并没有消亡。但与过去相比,它确实没有那么普及了。•事物之间的区别很大程度上是人类的偏见。•因为面向对象的继承是将事物组织成类,所以它不能很好地模拟现实世界;它只能很好地模拟人类思考现实世界的方式。•组合优于继承

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

6、Go2:Experiment, Simplify, Ship[15] (英文) 中文翻译:https://studygolang.com/topics/9815 ,译质量自己判断

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

7、你确定你会写 Dockerfile 吗?

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

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

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

开源项目

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

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

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

640?wx_fmt=jpeg

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

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

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

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

640?wx_fmt=png

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

作者专门写了篇文章介绍它:https://medium.com/appsflyer/health-checks-like-a-pro-3fa362942883

4、lego: 一个 Let’s Encrypt 客户端 和 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 https://godoc.org/gioui.org/ui 、https://godoc.org/gioui.org/ui/app 等。

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

完整代码:https://github.com/mikellxy/little_pineapple ,对此有兴趣的可以研究一下。

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

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

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

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

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

640?wx_fmt=png

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

本书共分为四个部分,第一部分简要回顾了与 Go 运行时及编译器相关的基础理论,并在其最后一章中简要讨论了 Go 程序的生命周期。第二部分着重关注 Go 的运行时机制,这包括调度器、内存分配器、垃圾回收期、调试机制以及程序的 ABI 等。第三部分则着眼于 Go 的编译器机制,包括 Go 编译器对关键字的翻译行为,对 cgo 程序的翻译过程,以及链接器等。最后一个部分则讨论了一些依赖运行时和编译器的标准库,本书只介绍这些标准库与运行时和编译器之间的配合,并不会完整的整个包的源码进行分析。

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

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

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

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

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

•国外程序员在 stackoverflow[31] 推荐的程序员必读书籍,中文版[32]。•stackoverflow[33] 上的程序员应该阅读的非编程类书籍有哪些? 中文版[34]•github[35] 上的一个流行的编程书籍索引 中文版[36]

订阅

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

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

640?wx_fmt=jpeg

References

[1] 提交 issue: https://github.com/polaris1119/golangweekly/issues[2] Istio 1.2.3 发布,大型微服务系统管理平台: https://www.oschina.net/news/108877/istio-1-2-3-released[3] 对 Go 的提案流程的思考: https://research.swtch.com/proposals[4] Go1.11.13 和 Go1.12.8 将在 8 月 13 日发布: https://groups.google.com/forum/#!topic/golang-nuts/-Ba7cHufTKc[5] Go Security Policy: https://golang.org/security[6] go-arg:Go 中基于 struct 的的参数解析: https://github.com/alexflint/go-arg[7] 什么实例的 Kind 为 interface?: https://studygolang.com/topics/9767[8] 为什么 go 语言的 slice 内部函数那么少?: https://segmentfault.com/q/1010000019341665[9] gorilla/websocket 包中的 Upgrade 第三个参数怎么用的?: https://studygolang.com/topics/9649[10] 如何去掉 float 小数点后多余的 0?: https://studygolang.com/topics/9806[11] Go 爬虫之 Colly 从入门到不放弃指南: https://zhuanlan.zhihu.com/p/76629605[12] 请问 sync.Pool 有什么缺点?: https://zhuanlan.zhihu.com/p/76812714[13] Go 小知识之 Go 中如何使用 set: https://studygolang.com/articles/20832[14] 面向对象编程的兴衰: https://media.weibo.cn/article?id=2309404402222191476809[15] Go2:Experiment, Simplify, Ship: https://github.com/llgoer/go-generics/blob/master/experiment-en.md[16] 从源码讲解 golang 内存分配: https://studygolang.com/articles/22652[17] LinDB: 开源分布式时序数据库: https://github.com/lindb/lindb[18] gomodifytags: 一个帮助修改 Go 语言 struct 字段 tags 的工具: https://github.com/fatih/gomodifytags[19] go-sundheit: 为 Go 服务提供健康检查的库: https://github.com/AppsFlyer/go-sundheit/[20] lego: 一个 Let’s Encrypt 客户端 和 ACME 库: https://github.com/go-acme/lego[21] Compress: 优化的压缩包: https://github.com/klauspost/compress[22] 一种监控 git 仓库并自动 pull 和 push 变动的工具: https://github.com/muesli/gitomatic[23] 通过 300 行 Go 代码实现一个简单的 RPC 框架来解释、学习 RPC: https://github.com/ankur-anand/simple-go-rpc[24] Gio 在 Go 中实现了可移植的即时模式 GUI 程序: https://gioui.org[25] 贪吃蛇 golang 实现(270 行代码): https://studygolang.com/topics/9822[26] Go 语言 & 后端相关技术的资源: https://github.com/g-airport/tech-stack[27] 关于面试/谈Offer/程序员职场生涯等资料合集: https://github.com/lietoumai/Awesome-offer[28] 书籍:Go 语言源码学习(未完成): https://github.com/changkun/go-under-the-hood[29] 当···时发生了什么?: https://github.com/skyline75489/what-happens-when-zh_CN[30] 免费的计算机编程类中文书籍: https://github.com/justjavac/free-programming-books-zh_CN[31] stackoverflow: http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read/1713%231713[32] 中文版: http://justjavac.com/other/2012/05/15/qualified-programmer-should-read-what-books.html[33] stackoverflow: http://stackoverflow.com/questions/38210/what-non-programming-books-should-programmers-read[34] 中文版: https://github.com/justjavac/free-programming-books-zh_CN/blob/master/what-non-programming-books-should-programmers-read.md[35] github: https://github.com/vhf/free-programming-books[36] 中文版: https://github.com/vhf/free-programming-books/blob/master/free-programming-books-zh.md[37] Go语言中文网: https://studygolang.com/go/weekly[38] 微信公众号: https://weixin.sogou.com/weixin?query=Go%E8%AF%AD%E8%A8%80%E4%B8%AD%E6%96%87%E7%BD%91[39] 今日头条: https://www.toutiao.com/c/user/59903081459/#mid=1586087918877709

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/143969.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • vue与jquery的区别_vue 3

    vue与jquery的区别_vue 31.jquery介绍:想必大家都用过jquery吧,这个曾经也是现在依然最流行的web前端js库,可是现在无论是国内还是国外他的使用率正在渐渐被其他的js库所代替,随着浏览器厂商对HTML5规范统一遵循以及ECMA6在浏览器端的实现,jquery的使用率将会越来越低2.vue介绍:vue是一个兴起的前端js库,是一个精简的MVVM。从技术角度讲,Vue.js专注于MVVM模型的ViewM…

    2022年10月16日
  • eclipse 导入父子工程_eclipse 导入maven 父子项目

    eclipse 导入父子工程_eclipse 导入maven 父子项目你先要确认svn上是否是maven项目,否则要自己重新建一个maven项目然后直接引入目录了。如果确认是maven项目,那么有个两个方案。案一:先用任何client软件将svn下载。然后在eclipse选择import,然后当作existmavenproject导入。案二:在project中有checkoutmavenfromscm。scm就是指版本控制软件。不过不同版本控制的sc…

  • Pycharm 中的 全局搜索(ctrl+shift+f) 功能无法使用的原因

    Pycharm 中的 全局搜索(ctrl+shift+f) 功能无法使用的原因原因是Pycharm和搜狗输入法的快捷键冲突

  • Java中获取时间戳

    Java中获取时间戳**Java语言中关于三种时间戳的获取之心得**最近项目开发过程中发现了项目中获取时间戳的业务。而获取时间戳有以下三种方式,首先先声明推荐使用System类来获取时间戳,下面一起看一看三种方式。1.System.currentTimeMillis()System类中的currentTimeMillis()方法是三种方式中效率最好的,运行时间最短。开发中如果设计到效率问题,推荐使用此种方式获取。System.currentTimeMillis()2.newDate().getTime()除

  • ubuntu linux下开启远程唤醒

    ubuntu linux下开启远程唤醒目录启动远程唤醒,需要主板支持才能进行。步骤一:检查计算机硬件是否支持WOL(wakeonlan)功能。步骤二:检查主板和电源是否支持WOL步骤三:检查网卡是否支持WOL步骤四:查看网卡步骤五:查询网卡是否支持远程唤醒步骤六:开启远程唤醒d为关闭g为开启步骤七:参考操作启动远程唤醒,需要主板支持才能进行。步骤一:检查计算机硬件是否支持WOL(wakeonlan)功能。步骤二:检查主板和电源是否支持WOL进入BIOS的PowerManage…

  • java笛卡尔积算法_Java 笛卡尔积算法的简单实现

    java笛卡尔积算法_Java 笛卡尔积算法的简单实现笛卡尔积算法的Java实现:(1)循环内,每次只有一列向下移一个单元格,就是CounterIndex指向的那列。(2)如果该列到尾部了,则这列index重置为0,而CounterIndex则指向前一列,相当于进位,把前列的index加一。(3)最后,由生成的行数来控制退出循环。publicclassTest{privatestaticString[]aa={“aa1”,”aa2…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号