Go语言爱好者周刊:第 81 期
这里记录每周值得分享的 Go 语言相关内容,周日发布。
本周刊开源(GitHub:polaris1119/golangweekly),欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue 。
鉴于一些人可能没法坚持把英文文章看完,因此,周刊中会尽可能推荐优质的中文文章。优秀的英文文章,我们的 GCTT 组织会进行翻译。
题图:vscode-go 插件 v0.22.0 默认启用 gopls。
刊首语
这期周刊两道题。
题一:以下代码输出什么?
package main
import (
"fmt"
)
type MS struct {
Name string
Cgs int
}
func main() {
hashRun := make(map[string]*MS)
mss := []MS{
MS{Name: "m", Cgs: 100},
MS{Name: "m", Cgs: 1},
}
for _, ms := range mss {
if h, ok := hashRun[ms.Name]; ok {
h.Cgs += ms.Cgs
} else {
hashRun[ms.Name] = &ms
}
}
for _, ms := range hashRun {
fmt.Println(ms.Cgs)
}
}
A:101;B:100;C:1;D:2
题二:下面代码输出什么?
package main
import (
"fmt"
)
func main() {
nums := []int{1, 2, 3, 4, 5}
sum := 0
for i, n := range nums {
i = 6
sum += n
}
fmt.Println(sum)
}
A:1;B:15;C:panic index out of range;D:doesn’t compile
谁在招 Gopher
整理近期的 Go 职位。有招聘需求可以到「Go招聘」发布!
资讯
Go 官方发布了 Go 1.15.8 和 Go1.14.15,这是小版本更新。主要修复一些 bug。
facebook 出品的 Entity 框架,简单而强大的 ORM,用于建模和查询数据。
VSCode 值得拥有。
4、O’Reilly Go 新书《Learning Go》预售
真实世界 Go 编程的惯用方法,英文版。
真的不远了。
JFrog 在 5 月 1 日将关闭 Bintray,JCenter,GoCenter 和 ChartCenter 服务,使用 JFrog GoCenter 作为 GOPROXY 的 gopher 可以切换到其他 GOPROXY 服务。
文章
1、10 年 Java 经验者:你应该尝试 Go 的 7 个理由
本文作者是一位工作了 20+ 年的工程师,其中 10+ 年使用 Java,7+ 年使用 C#,最近 3+ 年使用 Go。文章的观点是作者的个人总结,提倡你尝试并使用 Go 语言。目前作者已经不使用 Java 和 C# 了。
实践是最好的学习!但新手学习完 Go 基础后,却不知道如何进行实践,因为很多人工作中还没有机会使用 Go。这里是一些对初学者友好的项目和资源,可以作为你项目实践的基础,甚至在将来项目中使用。
3、Go 开发者 Top 6 IDE:你知道几个,又用哪个?
这个 Top 排行,没有直接数据支持,凭直觉的,哈哈哈哈哈。(其实也结合了部分网上资料,比如 2019 年官方的调查结果)。
GOMAXPROCS 控制着同时执行代码的 OS 线程的最大数量。这(GOMAXPROCS 值的设定)在程序启动期间,甚至在程序运行期间完成。一般来说,Go 将这个值设置为可用逻辑 CPU 的数量,但并不总是这样。
5、怎么知道某个 API 是在哪个 Go 版本添加的?这个功能如何实现的
因为 Go 的兼容性做的很好,很多人不太关心 Go 的具体版本。然而有时候可能会涉及到版本的问题,比如你想使用 strings.Builder,Go 版本就必须 >= 1.10,但以下代码在 Go1.10 却编译不通过。
Goroutines 是大多数用 Go 编写的程序的重要组成部分。但是,使用大量 goroutines 会使程序难以调试。那怎么办?在此博文中,我们将介绍如何使用自定义数据为 goroutine 加上标签。
7、深度解析 Sentinel Go 滑动窗口统计结构的设计
本文主要分析 Sentinel Go 流量指标统计底层滑动窗口的实现。
四舍五入是一个非常常见的功能,在流行语言标准库中往往存在 Round 的功能,它最少支持常用的 Round half up 算法。
RPC 即远程调用协议,简单来说就是调用远程的函数。
为什么项目内需要链路追踪?
昨天在内网上看到一篇讲数据库连接的文章,列出了一些 sql 包的一些源码,我注意到其中取用、归还连接的方式非常有意思——通过临时创建的 channel 来传递连接。
为了表达我对这种语言的热爱,我开发了一个工具包,以帮助希望使用 Go 来增强微服务的其他开发人员。
开源项目
Go 本地化框架。
字节跳动出品,一个有趣的 go struct 标签表达式语法,用于字段验证等。
fluent-ffmpeg 的 Go 语言实现。FFMPEG 是视频处理和编辑的命令行瑞士军刀。
4、notify
发送通知到各种消息服务。支持 Discord, Microsoft Tems, Slack, Telegram, Pushbullet 和 Email 等。
新轮子:纯 Go 实现的 mysql server 引擎。
6、cdb
DJ Bernstein 的 cdb 常量数据库库的 Pure Go 实现。
7、pongo2
可用于 Go 的类 Django 模板语法的模板语言。
8、https://github.com/jfyne/live
仅使用 Go 及其模板来编写交互式、实时 Web 应用程序,无需 js。
9、s3fs
Go1.16 filesystem 接口的 S3 存储实现。
Go event sourcing 框架。
11、franz-go
纯 Go 编写的全功能 kafka 客户端。
12、macdriver
适用于 Go 的原生Mac API。
13、paco
Go 语言实现的静态编译型语言,目标是 C。
资源&&工具
1、ticker
实时更新和位置跟踪的终端股票行情工具,Go 语言实现。
2、yq
便携式命令行 YAML 处理器。jq 是从命令行使用 JSON 的流行工具 — 而 yq 使用 YAML。
3、gapid
Google 开源的图形 API 调试器,不过目前开发不活跃。
4、Walrus
Go 实现的快速,安全,可靠的系统备份工具,可备份诸如 MySQL,PostgreSQL,Redis,etcd 等。
5、油管视频
精通 Go 标准库系列。
网址:https://egonelbre.com/js/gopher/,canvas 实现的。
7、网址分享
为指定 Go 接口定义自动生成对应的接口实现。
Go 语法速查表。
订阅
微信搜索"Go语言中文网"或者扫描二维码,即可订阅。