这里记录每周值得分享的 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 函数。
支持的架构越来越多了。
整理近期的 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语言中文网"或者扫描二维码,即可订阅。