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

Go语言精选

共 4003字,需浏览 9分钟

 ·

2021-06-03 00:15

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

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

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

由于微信公众号不支持外链,文章大量链接可通过文末「阅读原文」查看。

题图: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"])
}

以下是答题投票情况:

正确答案是 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]

带控制台接口的磁盘使用分析器。

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

1、贝壳找房找Gopher咯,快到壳里来。

2、华顺信安招Gopher

文章

1、Go 中为什么应该使用接口

强调一下是我个人的见解以及接口在 Go 语言中的意义。

2、我这样升级 Go 版本,你呢?

官方用的多版本管理方法。

3、gRPC 可以不用 pb 而使用 JSON 吗?

JSON payload 实现简易的请求和响应的内省。

4、为什么Go程序占用那么大的虚拟内存?

虚拟内存,不用惊慌!

5、如何让 Go 的缓存库 BigCache 更好用?

增加对 interface{} 的支持。

6、validator库你知多少?govalidator了解一下

Web 开发基本必备的。

7、Go 中如何让消息队列达到最大吞吐量?

本文带你一起探讨下消息队列消费端高吞吐的 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语言中文网"或者扫描二维码,即可订阅。

wechat

上期推荐参考资料

[1]

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


浏览 21
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报