未定义标识符上的“go get golang.org/x/tools/go/gcimporter15”失败

时间:2016-12-07 04:23:42

标签: go

我正在尝试将程序依赖于gcimporter15 for Go,因此我使用命令“go get golang.org/x/tools/go/gcimporter15”,但它失败并出现错误:

# golang.org/x/tools/go/gcimporter15
../../go/src/golang.org/x/tools/go/gcimporter15/bexport.go:557: undefined: constant.ToFloat
../../go/src/golang.org/x/tools/go/gcimporter15/gcimporter.go:396: pkg.SetName undefined (type *types.Package has no field or method SetName)

在我看来,gcimporter本身存在一个错误,但是当没有出现其他人时,我会得到这个错误。为什么不起作用?

我正在使用Go 1.5.3。

2 个答案:

答案 0 :(得分:0)

godoc.org/golang.org/x/tools/go/gcimporter15表示已弃用软件包gcimporter,此软件包将于2017年10月删除。应使用此新代码:golang.org/x/tools/go/gcexportdata代替gcimporter

所以,你要做的是:

$ go get godoc.org/golang.org/x/tools/go/gcexportdata

PS:Ubuntu 16.04 64bitgo version go1.6.2 linux/amd64内进行了测试,没有任何问题。

测试:

package main
import (
    "fmt"
    gcexportdata "golang.org/x/tools/go/gcexportdata"
)
func main() {
    filename, path := gcexportdata.Find("fmt", "")
    fmt.Println(filename, path)
}

输出:

/usr/lib/go-1.6/pkg/linux_amd64/fmt.a fmt

答案 1 :(得分:0)

它很糟糕但似乎gcimporter15go-1.5之间存在不匹配。我遇到了同样的问题并查看了文件go-1.5中的src/go/constant/value.go代码,而ToFloat()包中没有constant个函数。

正如@ n​​exus66所说,gcimporter已被弃用。所以,我不希望他们解决这个问题。如果您直接使用此软件包,最好继续使用推荐的gcexportdata软件包。如果您使用的是依次使用gcimporter的第三方库,则可能应升级到go-1.7。这就是我所做的,事情很顺利。