我一直试图使用导入器来解析特定程序包中定义的类型。但是,导入程序始终返回错误,指出未找到该软件包。我犯什么错误?
package main
import (
"fmt"
"go/importer"
)
func main() {
pkg, err := importer.Default().Import("github.com/onsi/ginkgo")
if err != nil {
panic(err)
}
fmt.Println(pkg)
}
我试图阅读go importer文档,但是它提供的信息非常有限。我也尝试使用我要在此处导入的软件包,但这无济于事。但是,如果我导入go标准软件包,例如“时间”,则当前可以导入该软件包。为什么会这样?
答案 0 :(得分:2)
Go进口商不会为您下载软件包。您可以使用dep或go modules来处理依赖关系,但是一个简单的解决方法是使用go get将软件包直接下载到您的gopath中:
go get -u github.com/onsi/ginkgo
此后,go importer将起作用,您的代码输出应为:
package ginkgo ("github.com/onsi/ginkgo")
[EDIT]使用Go模块:
有很多关于此的教程,但是快速而肮脏的方法是在您的包目录中:
$ GO111MODULE=on go mod init
$ GO111MODULE=on go mod tidy
这将检查您的项目并下载所有软件包。要在go.mod
上安装特定的软件包,可以使用:
$ go install github.com/onsi/ginkgo