如何使用Go Importer

时间:2019-05-22 14:31:47

标签: go

我一直试图使用导入器来解析特定程序包中定义的类型。但是,导入程序始终返回错误,指出未找到该软件包。我犯什么错误?

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标准软件包,例如“时间”,则当前可以导入该软件包。为什么会这样?

1 个答案:

答案 0 :(得分:2)

Go进口商不会为您下载软件包。您可以使用depgo 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