扬眉吐气:刚刚,Go 已经默认支持泛型了

大家好,我是 polarisxu。 上周 Go 1.17 发布,在发布文档中,没有提到泛型的事情。但在发布之前,大家就发现,泛型的相关代码在 1.17 中埋下了,只是默认不启用。 就在最近,gotip 已经默认启用泛型。Go 泛型官方叫做:type parameters。 -G 的默认值由 0 改为了 3,那 Go 1.17 有没有这个 flag? 01 Go1.17 启用泛型支持 安装 Go1.17,推荐使用类似 goup 这样的工具,方便切换版本,

Go 1.17 新特性:Module 有哪些变化?

大家好,我是 polarisxu。 自从 Go1.11 增加 Go Module 以来,每个版本都在不断改进 Module。Go1.17 也不例外。这次最主要的变化有两点: Module graph pruning:Module 依赖图修剪 Lazy Loading:Module 延迟加载 此外还有 Deprecated 注释等。本文就一起探究下这些新变化,因为有人没看懂,不知道这些变化是什么意思。 01 Module 依赖图修剪 要搞懂这个知识点,需要对比 1.17 之前的情况。 注意,

Go 第三方库推荐:类型转换如此简单

大家好,我是 polarisxu。 强类型语言有它的优势,但也有不便利的地方,最典型的就是类型转换。Golang 作为一门强类型语言,而且不支持隐式类型转换,因此这个问题更突出。虽然 Go 提供了不少方式进行类型转换,包括相关的标准库,比如 strconv 包。 然而,strconv 包使用没那么方便,比如 "8" 转为 int 类型: s := "8" i, err := strconv.Atoi(s) 你必须对 err 进行处理,因为返回两个值,没法直接将结果传递给

担心密码提交到 GitHub?建议使用这个 Go 开源工具

大家好,我是 polarisxu。 最近跟安全扛上了!这是我分享的 Go 安全相关的第 5 篇文章,前 4 篇文章如下: 《Go 团队开始重视安全问题了》 《Go Module 有漏洞?免费的 Go 漏洞扫描 VSCode 插件》 《这个工具真好:看看你的Go项目依赖有无漏洞》 重磅!GitHub 为 Go 社区带来安全支持 今天要分享的这个开源工具,我个人认为更实用,可以当作一个 vet 工具使用,切切实实检查日常开发经常会忽略的安全

Go 的时间格式化为什么是 2006-01-02 15:04:05?

大家好,我是 polarisxu。 没有什么是完美的!而且,有些东西,有些人认为好,有些人认为很糟糕。Go 也是如此。喜欢 Go 语言的朋友,大概率对其中某些地方不喜欢。比如,你喜欢 Go 中时间格式化固定的 2006-01-02 15:04:05 -0700 吗?为什么是这么一个时间?今天来一探究竟! 01 新手的困惑 无论是各种群里还是网上搜一下,包括国外的,对 2006-01-02 15:04:05 -0700 都很困惑。 一般的困扰主要有: 不知道只能固定要这个时间,换其他

GitHub 为 Go 社区带来安全支持

大家好,我是 polarisxu。 关于 Go 安全相关的内容,我写过几篇文章:《Go 团队开始重视安全问题了》 、《Go Module 有漏洞?免费的 Go 漏洞扫描 VSCode 插件》 和《这个工具真好:看看你的Go项目依赖有无漏洞》 ,有兴趣的可以看看。 今天介绍另外一个关于安全的内容,是 GitHub 的。 大家都知晓,目前 Go 是严重依赖 GitHub 的,很多第三方库基本都托管在 GitHub 上。因为 Go 把 GitHub 既当作代码协作的平台,也当作发布包的

Go开源项目推荐:500行代码确认请求时间花在哪

大家好,我是 polarisxu。 工作中遇到请求慢,难免想要查看时间都花在哪里了。办法肯定有不少,比如浏览器带的工具等。不过今天我要推荐一个命令行工具,目的有两个: 安装、使用方便,可以清晰的看出时间花在哪里了,建议放入自己的常用工具箱; Go 语言实现的,500 行左右代码,可以作为新手项目学习、练习、实战; 项目名称:httpstat,作者是 davecheney 大神。项目地址:http

一道关于 len 函数的诡异 Go 面试题解析

大家好,我是 polarisxu。 在 Go语言爱好者周刊第 104 期有一道题目,以下代码输出什么: package main func main() { var x *struct { s [][32]byte } println(len(x.s[99])) } 答题结果如下: 正确率只有 16%。 本文就讲解下为什么结果是 32。 01 解析题目 先剖析下这段代码,x 变量: var x *struct { s [][32]byte } 注意这里不是定义一个结构体类型,而是定义一个结构体类型指针变量,即 x 是一个指针,指针类型是一个匿名结构体。很显然,x 的值是 nil,因

厉害了我的 Go:推荐系统都有开源实现

大家好,我是 polarisxu。 看到一个项目:https://gorse.io/,这是一个用 Go 编写的开源推荐系统。Gorse 的目标是成为一个通用的开源推荐系统,可以迅速地引入到各种各样的在线服务中。通过将项目、用户和交互数据导入 Gorse,系统将自动训练模型,为每个用户生成推荐。 这个项目代码托管在 GitHub 上:https://github.com/zhenghaoz

Go1.17 新特性:新版构建约束

大家好,我是 polarisxu。 Go 1.17 下个月就要正式发布了。很多人要问泛型了吧,泛型已经很明确了,Go1.18 会有。今天给大家介绍 Go1.17 的一个新特性:构建约束 — Build Constraints。 确切来说,这个特性相关的工作在 1.16 时就加入,但处于过度阶段,1.17 在各方面都更完善,更完整的支持,是时候了解它了。 01 什么是构建约束 构建约束(build constraint),也叫做