V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
beego
lasuar
V2EX  ›  Go 编程语言

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

  •  
  •   lasuar · 2020-10-14 10:25:45 +08:00 · 2319 次点击
    这是一个创建于 623 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    RT,非常感谢!

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

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

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

    标准库 ast 包很少改动,数到第十个 commit 都已经是一年半以前了。而且大多数是改注释
    Yoock
        18
    Yoock  
       2020-10-14 23:57:39 +08:00   ❤️ 1
    不要怀疑标准库,绝大部分情况下是你自己的问题
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2799 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:55 · PVG 20:55 · LAX 05:55 · JFK 08:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.