如何在新版本的 go 中 import 旧版本的标准库?

2020-10-14 10:25:45 +08:00
 lasuar

方法最好是通用的,不是指某一个 pkg ;

RT,非常感谢!

2926 次点击
所在节点    Go 编程语言
18 条回复
AmrtaShiva
2020-10-14 10:41:36 +08:00
降低版本?
wleven
2020-10-14 10:43:21 +08:00
标准库不是向下兼容的吗?
ine181x
2020-10-14 10:44:01 +08:00
1.x 的标准库是向下兼容的?
cloverzrg2
2020-10-14 10:46:22 +08:00
试下这个格式 go get golang.org/x/net v0.0.0-20200116001909-b77594299b42
cloverzrg2
2020-10-14 10:47:07 +08:00
ppphp
2020-10-14 10:52:10 +08:00
根据最小版本原则,同一个依赖会引用最高版本,要降所有依赖的一起降
lasuar
2020-10-14 10:53:36 +08:00
@wleven 目前遇到的问题是 go/ast 这个库 在 go1.15 有问题,调试也没发现问题,只能想到这个办法
lasuar
2020-10-14 10:53:48 +08:00
@ine181x 目前遇到的问题是 go/ast 这个库 在 go1.15 有问题,调试也没发现问题,只能想到这个办法
lasuar
2020-10-14 10:55:40 +08:00
@cloverzrg2 go/ast 在 x 下面没有的,只有 golang.org/x/tools/go/ast/astutil,这个是 util 来的,也是引用标准库的 ast
katsusan
2020-10-14 12:09:04 +08:00
标准库默认的是链接$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 管理一个标准库的副本
Leigg
2020-10-14 12:23:18 +08:00
@katsusan 那就只能 vender 了
cholerae
2020-10-14 13:37:39 +08:00
@lasuar 啥问题,提 issue 了吗
cholerae
2020-10-14 13:38:23 +08:00
不要搞黑科技,如果真的有必要就老老实实拷出来当作一个第三方包来维护。
sunriz
2020-10-14 16:15:00 +08:00
自己 fork 一个再引用
Mohanson
2020-10-14 16:30:46 +08:00
每一个难以理解的问题,细究下来都是典型的 xy 问题

https://www.jianshu.com/p/bbe05166aa7d

直接问你发现的 ast 标准库的问题不是更好吗?
lasuar
2020-10-14 19:38:10 +08:00
@Mohanson 当然明白你的意思,但查清 /复现具体的问题对我来说目前要花不少时间,我只能基于经验判断并得出一个目前较快解决问题的方案,至于具体的问题,是否真的是标准库 bug 要等到自己有时间才能去查明。
reus
2020-10-14 23:37:02 +08:00
对编译器做 git bisect,看看是哪一个 commit 导致的,然后要么改自己代码,要么去 github 提 issue

标准库 ast 包很少改动,数到第十个 commit 都已经是一年半以前了。而且大多数是改注释
Yoock
2020-10-14 23:57:39 +08:00
不要怀疑标准库,绝大部分情况下是你自己的问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/714735

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX