Go语言爱好者周刊:第 154 期
这里记录每周值得分享的 Go 语言相关内容,周日发布。本周刊开源(GitHub:polaris1119/golangweekly),欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue 。
鉴于一些人可能没法坚持把英文文章看完,因此,周刊中会尽可能推荐优质的中文文章。优秀的英文文章,我们的 GCTT 组织会进行翻译。
题图:GoLand 2022.3 Roadmap
刊首语
先看下上周题目。以下代码输出什么?
package main
import "fmt"
func main() {
a := []int{7, 8, 9}
fmt.Println(a[real(2)])
}
A:0;B:7;C:9;D:不能编译
正确答案:C。正确率 42%,近一半的人选择了 D。
简单解析下。
real 是一个内建函数,虽然返回的类型是 FloatType,但这里返回的是常量(见 Go 规范)。这里要提醒大家,并非 slice 的索引可以是 float 类型。以下情况都是编译错误的:
// 以下编译错误:invalid argument: index b (variable of type float32) must be integer
var b float32 = 2
fmt.Println(a[b])
// 以下编译错误:invalid argument: index real(b) (value of type float32) must be integer
var b complex64 = 2
fmt.Println(a[real(b)])
本期是一道关于 context 的题目。以下代码输出什么?
package main
import (
"context"
"fmt"
)
func main() {
ctx, _ := context.WithTimeout(context.Background(), 0)
<-ctx.Done()
fmt.Println("timed out")
}
A:timed out;B:panic;C:没有任何输出
资讯
在 Go1.18 发布 5 个月后,Go1.19 如期发布了。
一个优雅的 Go 解释器。可以用于其他应用程序中的脚本编写,交互式 shell 或快速原型制作。你可以将其用作 REPL 或将其嵌入到自己的应用中。
适用于 Golang 应用程序的非常基础的线程安全进度条。
Go 实现的快速网站链接检查器。
很多语言都有这样的能力,这个 issue 讨论给 Go 加一个 iterator。
GoLand 下一版本功能介绍。
文章
1、关于Go并发编程,你不得不知的“左膀右臂”——并发与通道!
本文主要介绍 Goroutine 和 channel 的实现。
2、7 年后,发现用 Go 实现 CockroachDB 是正确的选择
分享 CockroachDB 团队使用 Go 的体会。
尝试用 Go 的泛型循序渐进地实现一些常见的函数式特性,从而探索 Go 泛型的优势和不足。
在实际使用微服务框架的时候,大部分的性能瓶颈在于业务代码,而不是框架本身,所以重点优化业务代码也非常的重要。
开源项目
1、maths
标准库 math 包中不包含的数学函数。
2、dig
基于反射的依赖注入工具包。
3、nano
一个完全用 Go 实现的私有云 IaaS 平台。作者自荐。
Go 常用的加密解密库。作者自荐。
5、dbpack
一个数据库代理,目标是解决业务开发中遇到的分布式事务问题,并提供读写分离、分库分表的解决方案。
资源&&工具
1、govim
用 Go 开发的 Vim8 插件。
2、iftree
可视化的 k8s 网络设备关系的命令行工具。
一款容器安全开源工具集,支持检测容器镜像安全风险。作者自荐。
4、lakeFS
将对象存储转换为类似 Git 的存储库。
5、grm
Redis Web 管理工具。
订阅
微信搜索"Go语言中文网"或者扫描二维码,即可订阅。