Golang Go语言中如何在新版本中import旧版本的标准库?
Golang Go语言中如何在新版本中import旧版本的标准库?
方法最好是通用的,不是指某一个 pkg ;
RT,非常感谢!
标准库不是向下兼容的吗?
1.x 的标准库是向下兼容的?
试下这个格式 go get golang.org/x/net v0.0.0-20200116001909-b77594299b42
go get golang.org/x/net@c65d6632
根据最小版本原则,同一个依赖会引用最高版本,要降所有依赖的一起降
目前遇到的问题是 go/ast 这个库 在 go1.15 有问题,调试也没发现问题,只能想到这个办法
目前遇到的问题是 go/ast 这个库 在 go1.15 有问题,调试也没发现问题,只能想到这个办法
go/ast 在 x 下面没有的,只有 golang.org/x/tools/go/ast/astutil,这个是 util 来的,也是引用标准库的 ast
标准库默认的是链接$GOROOT/pkg/$GOOS_$GOARCH 下的目标文件,
比如"import go/ast“的话会链接 /usr/local/go/pkg/linux_amd64/go/ast.a,
目前没看到链接器有提供选项可以改这个。按我的愚见有两种思路:
1. git clone 指定版本的 go 源码到 GOPATH/pkg/mod/github.com/golang 下
比如 git clone --branch go1.13.1 https://github.com/golang/go %GOPATH%/pkg/mod/github.com/golang
这样可以 import "github.com/golang/go/src/go/ast"来使用
2. 在当前项目下用 vendor 管理一个标准库的副本
那就只能 vender 了
啥问题,提 issue 了吗
不要搞黑科技,如果真的有必要就老老实实拷出来当作一个第三方包来维护。
自己 fork 一个再引用
每一个难以理解的问题,细究下来都是典型的 xy 问题
https://www.jianshu.com/p/bbe05166aa7d
直接问你发现的 ast 标准库的问题不是更好吗?
当然明白你的意思,但查清 /复现具体的问题对我来说目前要花不少时间,我只能基于经验判断并得出一个目前较快解决问题的方案,至于具体的问题,是否真的是标准库 bug 要等到自己有时间才能去查明。
不要怀疑标准库,绝大部分情况下是你自己的问题
在Golang中,Go语言的模块系统和版本管理主要通过Go Modules来实现。通常情况下,Go的标准库(std lib)是随着Go语言版本的发布而更新的,且标准库并没有像第三方库那样的独立版本控制。因此,直接“import旧版本的标准库”在Go的官方工具链中并不被直接支持。
不过,如果你确实需要使用某个特定Go版本中的标准库行为(可能是为了兼容旧代码或解决新版本中的回归问题),你可以考虑以下几种方法:
-
使用特定版本的Go编译器:最简单直接的方法是使用包含你所需标准库版本的Go编译器来编译你的项目。你可以通过安装多个Go版本来实现这一点,使用
go version
命令来切换版本。 -
复制标准库代码:虽然不推荐,但理论上你可以将旧版本的标准库代码复制到你的项目中,并适当调整包路径以避免冲突。这种方法可能会引入维护负担和潜在的法律问题。
-
使用兼容性层:如果新旧版本的标准库差异不大,你可以考虑在项目中实现一个兼容性层,以适配新版本的行为。
-
依赖管理:对于第三方库,Go Modules允许你指定依赖的具体版本。但对于标准库,这一机制不适用。
总之,处理标准库版本问题通常涉及到使用特定版本的Go编译器,这是最直接且官方推荐的方法。