我正在尝试将程序依赖于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。
答案 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 64bit
和go 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)
它很糟糕但似乎gcimporter15
和go-1.5
之间存在不匹配。我遇到了同样的问题并查看了文件go-1.5
中的src/go/constant/value.go
代码,而ToFloat()
包中没有constant
个函数。
正如@ nexus66所说,gcimporter
已被弃用。所以,我不希望他们解决这个问题。如果您直接使用此软件包,最好继续使用推荐的gcexportdata
软件包。如果您使用的是依次使用gcimporter
的第三方库,则可能应升级到go-1.7
。这就是我所做的,事情很顺利。