如何使用go进口商

如何使用go进口商,go,Go,我一直在尝试使用导入器来解析特定包中定义的类型。但是,进口商总是返回一个错误,说明找不到包裹。我犯了什么错误 主程序包 进口( “fmt” “go/进口商” ) func main(){ pkg,err:=importer.Default().Import(“github.com/onsi/gingo”) 如果错误!=零{ 恐慌(错误) } fmt.Println(包装) } 我试图阅读go importer文档,但它提供的信息非常有限。我还尝试使用我在这里导入的包,但它没有帮助。但是,如果导

我一直在尝试使用导入器来解析特定包中定义的类型。但是,进口商总是返回一个错误,说明找不到包裹。我犯了什么错误

主程序包
进口(
“fmt”
“go/进口商”
)
func main(){
pkg,err:=importer.Default().Import(“github.com/onsi/gingo”)
如果错误!=零{
恐慌(错误)
}
fmt.Println(包装)
}

我试图阅读go importer文档,但它提供的信息非常有限。我还尝试使用我在这里导入的包,但它没有帮助。但是,如果导入go标准包,例如“time”,则当前可以导入该包。为什么会这样?

Go进口商不会为您下载该软件包。您可以使用或处理依赖项,但一个简单的解决方案是使用以下方法将包直接下载到您的gopath:

之后,go importer将工作,您的代码输出应为:

package ginkgo ("github.com/onsi/ginkgo")
[编辑]使用Go模块:


关于这一点,有很多教程,但最简单的方法是,在您的软件包目录中:

$ GO111MODULE=on go mod init
$ GO111MODULE=on go mod tidy
这将检查您的项目并下载所有软件包。要在您的
go.mod
上安装特定软件包,您可以使用:

$ go install github.com/onsi/ginkgo

您正在尝试在运行时动态导入。。。或者,正如下面的问题所解释的,在编译之前进行导入是否很酷?只是澄清一下我需要什么。我正在运行时检测包信息。我也主要使用go模块,而不是GOPATH。虽然我认为现有的
go/importer
包应该有一种方法可以做到这一点,该包在内部调用
go
工具来定位模块源代码,我想你应该看看哪个应该取代
go/importer
软件包。我用GOPATH试过了,效果不错。因此,我的问题是如何使用Go模块实现同样的功能?关于这一点,有很多教程,但最简单的方法是,在您的软件包目录上:$GO111MODULE=on-Go-mod init$GO111MODULE=on-Go-mod-tidy,它将检查您的项目并下载所有软件包。要在您的
go.mod
上安装特定的软件包,您可以使用:$go install github.com/onsi/ginkgoI know-how-To-set-go模块。但是,问题是,如果我导入的包位于GOPATH中,我可以导入它。但是如果包不在GOPATH中,
导入程序
无法找到它。但因为我使用的是GOPATH,所以我无法获取GOPATH中的所有包。嗯,明白了。。。这是一个棘手的场景。。。我还没有测试过,但我认为
go mod tidy
会很好,因为它不是通过
import
直接导入到您的代码中的。我最后的猜测可能是用
$go mod vendor
?不确定是否与
tidy
类似,如果它不会覆盖您的
go.mod
配置上的任何更改并消除未“导入”的包是的,
go mod tidy
将删除未导入的包。旧的
导入
界面也不适用于供应商:
警告:此界面不支持导入本地供应商的软件包。
$ go install github.com/onsi/ginkgo