Golang Go语言中为什么安装包不包含 golang.org/x/net/context?

发布于 1周前 作者 sinazl 来自 Go语言

添加完 sqlite 后编译提示 cannot find package “golang.org/x/net/context” in any of: ,发现这个谷歌自己的,且好像还有其他的包,好奇问为啥不直接添加进安装包里去???
Golang Go语言中为什么安装包不包含 golang.org/x/net/context?

5 回复

那是因为它包含到 “context” 包里了,这个是作为 1.7 的特性被写到 release note 里的。
改个导入地址吧,不少第三方包没能在这半年半年内跟上 go 的节奏。

更多关于Golang Go语言中为什么安装包不包含 golang.org/x/net/context?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这个功能是 1.7 的新功能,考虑到很多版本并未迁移的用户所以保留了这个路径。如果你使用了 1.8 版本的 go ,可以使用 go fix 自动修复

想起来因为自动 import 导致两个文件导入了不同的 context 的悲剧事件😂

不同 context 其实很多时候使用得当可以兼容,毕竟他们有相同的 interface

在Go语言(Golang)的发展过程中,golang.org/x/net/context 作为一个重要的包,曾用于处理上下文(context)管理,特别是在控制并发操作、超时和取消信号等方面。然而,它在标准库中的位置和作用经历了一些变化,这是理解为什么安装包默认不包含 golang.org/x/net/context 的关键。

早期,context 包是作为 golang.org/x/net/context 存在于 Go 的扩展库中。但随着 Go 1.7 版本的发布,context 包被正式纳入标准库(位于 context 包下),成为官方推荐使用的版本。这一变动意味着开发者可以直接使用标准库中的 context,而无需额外依赖 golang.org/x/net/context

因此,现代的 Go 安装包通常不包含 golang.org/x/net/context,因为该包的功能已经被标准库中的 context 包所替代。对于新项目或维护中的项目,建议迁移到使用标准库中的 context,以享受更好的兼容性、维护和更新支持。

如果你遇到必须使用 golang.org/x/net/context 的旧代码,可能需要手动通过 go get 命令获取这个包,但这通常不是推荐的做法,除非有特定的兼容性需求。总的来说,迁移到标准库中的 context 是保持代码现代和兼容性的最佳实践。

回到顶部