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

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

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

go 1.19 计划(Go爱好者周刊第61)(1)

题图:GitHub CLI 1.0 正式发布

刊首语

gopls 0.5.0 发布,内存有了很大的提升。使用 VSCode 等文本编辑器开发 Go 的福音。为此站长送出 2 本 《Go语言编程之旅》,参与方式点击这里。

附上一道简单的题:

packagemain constcl=100 varbl=123 funcmain(){ println(&bl,bl) println(&cl,cl) }

以上代码是否正确?为什么?

资讯

1、gopls 0.5.0 发布

内存占用大幅降低。

2、GitHub CLI 1.0 正式版发布

据说极客都喜欢这种终端命令模式。

3、Yaegi 0.9 发布[3]

一个优雅的 Go 解释器。可以用于其他应用程序中的脚本编写,交互式 shell 或快速原型制作。你可以将其用作 REPL 或将其嵌入到自己的应用中。

4、Go 泛型如何实现的讨论[4]

同时 Keith Randall 提出的两个实现方案。

文章

1、在 Go 语言中,我为什么使用接口

接口在 Go 语言中的意义。

2、有想过如何为 Go 语言增加一个语句吗?

这是探讨 Go 编译器的文章,向 Go 语言添加了一条新语句。

3、Go 和 Java 对比学习:单例模式

你常用语言的单例模式如何实现的呢?

4、Goroutine 是轻量的,但也得正确使用:通过 GODEBUG 提升对 Goroutine 的使用

Go 协程是轻量的,在很多场景能提升你的程序性能。不幸的是,如果使用不当,也可能降低你程序的性能,因为 Go 协程的上线文切换也需要消耗一定的资源。

5、漏桶、令牌桶限流算法的 Go 语言实现

限流又称为流量控制(流控),通常是指限制到达系统的并发请求数。

6、记一次线上性能调优:火焰图是利器

面对性能调优问题,很多人往往只是单纯的套用既往的经验:先试试一个,不行再试试另一个。

7、Go 编程的三个常见问题

作者在文章中列举了使用 Go 语言过程碰到的三个常见问题,并且都给出了解决方法,一起来看下作者是怎么解决的!

8、极端情况下收缩 Go 的线程数[5]

在 Go 的 runtime 里有一些创建了就没法回收的东西。

9、一篇短文介绍 Defer 是如何工作的

意犹未尽。

开源项目

1、bluetooth[6]

Go 的跨平台蓝牙 API,tinygo 使用。

2、datatable[7]

一个 Go 内存表。用于处理表格数据,例如 excel 电子表格。受 pandas python 包和 data.frame R 结构的启发。

3、gota[8]

这是 Go 编程语言的 DataFrames,Series 和数据整理方法的实现。

4、2048[9]

Golang 中 2048 游戏的 CLI 实现。

go 1.19 计划(Go爱好者周刊第61)(2)

5、gomajor[10]

帮助你简化 module 主版本号升级的工具。

6、gogit[11]

用 Go 语言实现 git 内部命令。同时学习 Git 和 Go。

7、vssh[12]

通过 SSH 大规模执行命令。雅虎出品。

go 1.19 计划(Go爱好者周刊第61)(3)

8、ali[13]

生成 HTTP 负载并实时绘制结。

资源&&工具

1、modgv[14]

将 go mod graph 输出转换为 Graphviz 的 DOT 语言,以图形方式可视化项目的依赖关系。

go 1.19 计划(Go爱好者周刊第61)(4)

2、yarr[15]

一个 rss 阅读器。

go 1.19 计划(Go爱好者周刊第61)(5)

3、leaf[16]

通用的热编译工具。监视工作目录中的更改,并在文件更新时运行指定的命令。

4、go-immutable-radix[17]

Go 中的不可变基数树(radix)实现。

5、mvn-golang[18]

用于构建 Go 应用的 maven 插件。

go 1.19 计划(Go爱好者周刊第61)(6)

6、crlfuzz[19]

用 Go 语言编写的快速扫描 CRLF 漏洞的工具。

7、go-wechaty[20]

Go 语言编写的面向聊天机器人的对话式微信 SDK。

go 1.19 计划(Go爱好者周刊第61)(7)

参考资料

[1]

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

[2]

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

[3]

Yaegi 0.9 发布: https://github.com/traefik/yaegi

[4]

Go 泛型如何实现的讨论: https://groups.google.com/g/golang-dev/c/OcW0ATRS4oM

[5]

极端情况下收缩 Go 的线程数: https://xargin.com/shrink-go-threads/

[6]

bluetooth: https://github.com/tinygo-org/bluetooth

[7]

datatable: https://github.com/datasweet/datatable

[8]

gota: https://github.com/go-gota/gota

[9]

2048: https://github.com/chhabraamit/2048

[10]

gomajor: https://github.com/icholy/gomajor

[11]

gogit: https://github.com/ssrathi/gogit

[12]

vssh: https://github.com/yahoo/vssh

[13]

ali: https://github.com/nakabonne/ali

[14]

modgv: https://github.com/lucasepe/modgv

[15]

yarr: https://github.com/nkanaev/yarr

[16]

leaf: https://github.com/vrongmeal/leaf

[17]

go-immutable-radix: https://github.com/hashicorp/go-immutable-radix

[18]

mvn-golang: https://github.com/raydac/mvn-golang

[19]

crlfuzz: https://github.com/dwisiswant0/crlfuzz

[20]

go-wechaty: https://github.com/wechaty/go-wechaty

[21]

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

[22]

https://weixin.sogou.com/weixin?query=Go语言中文网

,