Skip to content
On this page

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

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

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

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

题图:vscode-go 插件 v0.22.0 默认启用 gopls。

刊首语

这期周刊两道题。

题一:以下代码输出什么?

go
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

题二:下面代码输出什么?

go
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招聘」发布!

1、腾讯云存储/NoSQL 招聘 Go:腾讯喜欢开源作者

2、金山云招这么多 Gopher?福利还真香

资讯

1、Go 1.15.8 发布

Go 官方发布了 Go 1.15.8 和 Go1.14.15,这是小版本更新。主要修复一些 bug。

2、ent 0.6 发布

facebook 出品的 Entity 框架,简单而强大的 ORM,用于建模和查询数据。

3、官博:VSCode Go 扩展默认将启用 gopls

VSCode 值得拥有。

4、O’Reilly Go 新书《Learning Go》预售

真实世界 Go 编程的惯用方法,英文版。

5、Go 泛型提案进入“likely accept”阶段

真的不远了。

6、gocenter 不建议使用了

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# 了。

2、苦于没有 Go 实战项目?也许本文的一些想法可以试试

实践是最好的学习!但新手学习完 Go 基础后,却不知道如何进行实践,因为很多人工作中还没有机会使用 Go。这里是一些对初学者友好的项目和资源,可以作为你项目实践的基础,甚至在将来项目中使用。

3、Go 开发者 Top 6 IDE:你知道几个,又用哪个?

这个 Top 排行,没有直接数据支持,凭直觉的,哈哈哈哈哈。(其实也结合了部分网上资料,比如 2019 年官方的调查结果)。

4、图解 Go GOMAXPROCS 和实时更新

GOMAXPROCS 控制着同时执行代码的 OS 线程的最大数量。这(GOMAXPROCS 值的设定)在程序启动期间,甚至在程序运行期间完成。一般来说,Go 将这个值设置为可用逻辑 CPU 的数量,但并不总是这样。

5、怎么知道某个 API 是在哪个 Go 版本添加的?这个功能如何实现的

因为 Go 的兼容性做的很好,很多人不太关心 Go 的具体版本。然而有时候可能会涉及到版本的问题,比如你想使用 strings.Builder,Go 版本就必须 >= 1.10,但以下代码在 Go1.10 却编译不通过。

一文详解如何在调试过程中查找 Goroutine

Goroutines 是大多数用 Go 编写的程序的重要组成部分。但是,使用大量 goroutines 会使程序难以调试。那怎么办?在此博文中,我们将介绍如何使用自定义数据为 goroutine 加上标签。

7、深度解析 Sentinel Go 滑动窗口统计结构的设计

本文主要分析 Sentinel Go 流量指标统计底层滑动窗口的实现。

8、四舍五入在 Go 语言中为何如此困难

四舍五入是一个非常常见的功能,在流行语言标准库中往往存在 Round 的功能,它最少支持常用的 Round half up 算法。

9、在校生的万字长文:gRPC 实操指南(golang)

RPC 即远程调用协议,简单来说就是调用远程的函数。

10、Go - 实现项目内链路追踪

为什么项目内需要链路追踪?

11、Go channel 的妙用

昨天在内网上看到一篇讲数据库连接的文章,列出了一些 sql 包的一些源码,我注意到其中取用、归还连接的方式非常有意思——通过临时创建的 channel 来传递连接。

12、我做了一个Go语言的微服务工具包

为了表达我对这种语言的热爱,我开发了一个工具包,以帮助希望使用 Go 来增强微服务的其他开发人员。

开源项目

1、localizer

Go 本地化框架。

2、go-tagexpr

字节跳动出品,一个有趣的 go struct 标签表达式语法,用于字段验证等。

3、go-fluent-ffmpeg

fluent-ffmpeg 的 Go 语言实现。FFMPEG 是视频处理和编辑的命令行瑞士军刀。

4、notify

发送通知到各种消息服务。支持 Discord, Microsoft Tems, Slack, Telegram, Pushbullet 和 Email 等。

5、go-mysql-server

新轮子:纯 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 存储实现。

10、eventually-go

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 标准库系列。

6、眼睛会跟着鼠标移动的 Gopher

网址:https://egonelbre.com/js/gopher/,canvas 实现的。

7、网址分享

为指定 Go 接口定义自动生成对应的接口实现。

8、golang-cheat-sheet

Go 语法速查表。

订阅

这个周刊每周日发布,同步更新在Go语言中文网微信公众号

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

wechat

Released under the MIT License.