Go语言爱好者周刊:第 97 期
共 4003字,需浏览 9分钟
·
2021-06-03 00:15
这里记录每周值得分享的 Go 语言相关内容,周日发布。
本周刊开源(GitHub:polaris1119/golangweekly[1]),欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue[2] 。
鉴于一些人可能没法坚持把英文文章看完,因此,周刊中会尽可能推荐优质的中文文章。优秀的英文文章,我们的 GCTT 组织会进行翻译。
由于微信公众号不支持外链,文章大量链接可通过文末「阅读原文」查看。
![](https://filescdn.proginn.com/e7f6b8f7cdd457c43f202817932999cb/1b9be3642fff13ab6ac4999291f76161.webp)
题图:Go 带颜色输出的库 fatih/color
刊首语
应大家要求,先简单解析下上期周刊的题目,出题者:iMarlboro[3]
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"])
}
以下是答题投票情况:
![](https://filescdn.proginn.com/c6d189c387874a390f1b2537fa9bb239/d529cbec23dcc22186e21ad5e10b4418.webp)
正确答案是 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)
}
资讯
1、gdu 5.0 发布[4]
带控制台接口的磁盘使用分析器。
![](https://filescdn.proginn.com/4b12dda03b80bd03725f4fb30d83a52c/8f45dcef58e29f79a7bb8566d9e6239f.webp)
2、Caire 1.3 发布[5]
使用接缝雕刻来拉伸图像的不重要部分,从而允许在调整大小的过程中考虑图像的内容。
3、color 1.12.0 发布[6]
颜色文本输出包。
4、go-elasticsearch 7.13.0 发布[7]
官方的 Go 客户端。
5、Go 新提案[8]
bytes、strings 包增加 Cut 函数。
6、提案:将 Go 移植到中科龙芯指令架构[9]
支持的架构越来越多了。
谁在招 Gopher
整理近期的 Go 职位。有招聘需求可以到「Go招聘」发布!
文章
强调一下是我个人的见解以及接口在 Go 语言中的意义。
官方用的多版本管理方法。
JSON payload 实现简易的请求和响应的内省。
虚拟内存,不用惊慌!
增加对 interface{} 的支持。
6、validator库你知多少?govalidator了解一下
Web 开发基本必备的。
本文带你一起探讨下消息队列消费端高吞吐的 Go
框架实现。
开源项目
1、revive[10]
一个旨在提供更多结构和可配置性的 Golint 的替代品。它的速度据说有数倍提升。
2、render[11]
轻松 Render JSON,XML,二进制数据和HTML 模板响应。
3、limitio[12]
带有 limiit 功能的 io.Reader 和 io.Writer。
4、lima[13]
Linux 中的 macOS 子系统 lima。
5、sealer[14]
一款分布式应用打包交付运行的解决方案,阿里巴巴出品。
6、netmaker[15]
通过安全,快速,专用网络连接任何计算机,并从中央服务器管理多个网络。
7、forms[16]
让表单创建和处理更简单。
8、couper[17]
一种轻量级 API 网关,旨在支持构建和操作 API 驱动的 Web 项目的开发人员。
资源&&工具
1、go-map-schema[18]
简单的 JSON 类型检查。
2、cocert[19]
私钥安全分发工具。
3、Go 编码安全指南[20]
腾讯出品。
4、油管视频[21]
Go 还是 Rust,看 Go 专家与 Rust 专家的圆桌辩论。
5、mtail[22]
从应用程序日志中提取 WhiteBox 监视数据以在时间序列数据库中收集。Google 出品。
订阅
这个周刊每周日发布,同步更新在Go语言中文网[23]和微信公众号[24]。
微信搜索"Go语言中文网"或者扫描二维码,即可订阅。
上期推荐参考资料
polaris1119/golangweekly: https://github.com/polaris1119/golangweekly
[2]提交 issue: https://github.com/polaris1119/golangweekly/issues
[3]iMarlboro: https://github.com/iMarlboro
[4]gdu 5.0 发布: https://github.com/dundee/gdu
[5]Caire 1.3 发布: https://github.com/esimov/caire
[6]color 1.12.0 发布: https://github.com/fatih/color
[7]go-elasticsearch 7.13.0 发布: https://github.com/elastic/go-elasticsearch
[8]Go 新提案: https://github.com/golang/go/issues/46336
[9]提案:将 Go 移植到中科龙芯指令架构: https://github.com/golang/go/issues/46229
[10]revive: https://github.com/mgechev/revive
[11]render: https://github.com/unrolled/render
[12]limitio: https://github.com/nanmu42/limitio
[13]lima: https://github.com/AkihiroSuda/lima
[14]sealer: https://github.com/alibaba/sealer
[15]netmaker: https://github.com/gravitl/netmaker
[16]forms: https://github.com/coscms/forms
[17]couper: https://github.com/avenga/couper
[18]go-map-schema: https://github.com/Kangaroux/go-map-schema
[19]cocert: https://github.com/Dentrax/cocert
[20]Go 编码安全指南: https://github.com/Tencent/secguide/blob/main/Go%E5%AE%89%E5%85%A8%E6%8C%87%E5%8D%97.md
[21]油管视频: https://www.youtube.com/watch?v=N-E-qtQhsHw
[22]mtail: https://github.com/google/mtail
[23]Go语言中文网: https://studygolang.com/go/weekly
[24]微信公众号: https://weixin.sogou.com/weixin?query=Go%E8%AF%AD%E8%A8%80%E4%B8%AD%E6%96%87%E7%BD%91