Go语言爱好者周刊:第 97 期
这里记录每周值得分享的 Go 语言相关内容,周日发布。
本周刊开源(GitHub:polaris1119/golangweekly),欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue 。
鉴于一些人可能没法坚持把英文文章看完,因此,周刊中会尽可能推荐优质的中文文章。优秀的英文文章,我们的 GCTT 组织会进行翻译。
题图:Go 带颜色输出的库 fatih/color
刊首语
应大家要求,先简单解析下上期周刊的题目,出题者:iMarlboro
package main
import (
"fmt"
"sync"
)
func main() {
var m sync.Map
m.Store("address", map[string]string{"province": "江苏", "city": "南京"})
v, _ := m.Load("address")
fmt.Println(v["province"])
}
以下是答题投票情况:
正确答案是 B。为什么?
这道题目的关键是 sync.Map 相关的定义(主要看本题使用了的 Store 和 Load):
func (m *Map) Load(key interface{}) (value interface{}, ok bool)
func (m *Map) Store(key, value interface{})
看到了没?接收的 key 和 value 都是 interface{}(返回的 value 也是 interface{}),所以,通过 Load 获取 key 对应的 value 是一个 interface{}。fmt.Println(v["province"])
这句相当于把 interface{} 当成 map 了,肯定报错,必须进行类型断言。你答对了吗?
有些人可能不明白为什么要泛型。有了泛型,这道题目就不需要做类型断言了。
看看本期周刊的题目。以下代码输出什么?
package main
import (
"fmt"
)
func hello(i *int) int {
defer func() {
*i = 19
}()
return *i
}
func main() {
i := 10
j := hello(&i)
fmt.Println(i, j)
}
A:10 10;B:10 19;C:19 10;D:19 19
资讯
带控制台接口的磁盘使用分析器。
使用接缝雕刻来拉伸图像的不重要部分,从而允许在调整大小的过程中考虑图像的内容。
颜色文本输出包。
官方的 Go 客户端。
5、Go 新提案
bytes、strings 包增加 Cut 函数。
支持的架构越来越多了。
谁在招 Gopher
整理近期的 Go 职位。有招聘需求可以到「Go招聘」发布!
文章
强调一下是我个人的见解以及接口在 Go 语言中的意义。
官方用的多版本管理方法。
JSON payload 实现简易的请求和响应的内省。
虚拟内存,不用惊慌!
增加对 interface{} 的支持。
6、validator库你知多少?govalidator了解一下
Web 开发基本必备的。
本文带你一起探讨下消息队列消费端高吞吐的 Go
框架实现。
开源项目
1、revive
一个旨在提供更多结构和可配置性的 Golint 的替代品。它的速度据说有数倍提升。
2、render
轻松 Render JSON,XML,二进制数据和HTML 模板响应。
3、limitio
带有 limiit 功能的 io.Reader 和 io.Writer。
4、lima
Linux 中的 macOS 子系统 lima。
5、sealer
一款分布式应用打包交付运行的解决方案,阿里巴巴出品。
6、netmaker
通过安全,快速,专用网络连接任何计算机,并从中央服务器管理多个网络。
7、forms
让表单创建和处理更简单。
8、couper
一种轻量级 API 网关,旨在支持构建和操作 API 驱动的 Web 项目的开发人员。
资源&&工具
简单的 JSON 类型检查。
2、cocert
私钥安全分发工具。
腾讯出品。
4、油管视频
Go 还是 Rust,看 Go 专家与 Rust 专家的圆桌辩论。
5、mtail
从应用程序日志中提取 WhiteBox 监视数据以在时间序列数据库中收集。Google 出品。
订阅
微信搜索"Go语言中文网"或者扫描二维码,即可订阅。