【问题标题】:golang "go get" pulling lot of dependencies. Even trying go get -d ./... fails and says it needs more dependenciesgolang “go get” 拉取大量依赖项。即使尝试 go get -d ./... 失败并说它需要更多依赖项
【发布时间】:2019-10-03 02:35:50
【问题描述】:

我正在尝试为谷歌云编写云 API,并且刚刚导入了 2 个包 “golang.org/x/net/context” “golang.org/x/oauth2/google”

当我尝试执行 go get 时,它会说缺少包。所以我试着做“go get -f ./...”。我也尝试去获取它需要的所有东西,但是依赖关系永远不会结束,我的 src 文件夹正在加载很多包。不知道为什么它拉得这么多。请帮忙。

Go 1.12 中有什么改变吗?在此之前我使用的是旧版本的 Golang。 谢谢

去 golang.org/x/... 去获取 -d ./...

import (
  "fmt"
  "golang.org/x/net/context"
  "golang.org/x/oauth2/google"
  "google.golang.org/api/compute/v1"
)
func Test() bool{
    projects := [...]string{
       "xxxx",
    }

    ctx := context.Background()
    client, err := google.DefaultClient(ctx,compute.ComputeScope)
    if err != nil {
        fmt.Println(err)
    }
    return true
}

代码应该可以编译。

【问题讨论】:

  • 使用新模块,您不需要go get 那些。您应该能够简单地构建您的源代码,并且它应该为您提取所有必要的依赖项。也就是说,我猜它是计算/v1 包,它正在拉出很多其他包。
  • 谢谢。请您详细说明一下?
  • 如果我只是构建它。我收到以下错误。 “在以下任何一个中都找不到包“golang.org/x/net/context”:”(GOROOT 和 GOPATH)
  • 没有理由使用 golang.org/x/net/context;它是一个过渡包,多年前已被context 取代。 Godoc 可以渲染dependency graph

标签: go


【解决方案1】:

当我们谈论 Go 1.12 时,您可能使用 mod,否则,现在是转向它的好时机。

因此,使用 mod 您需要执行以下操作: 将GO111MODULE 环境变量设置为"on"

export GO111MODULE=on

那你需要启动一个模块

go mod init <module_name>

名称可以包含 GitHub 路径,也可以只是一个名称,如 go-superlib 等。

然后mod 将检查您的所有模块 .go 文件并创建依赖项列表。你只需要做一个

go get

然后go mod 会为你做一切。

P.S.:不要尝试安装 golang.org/x/... - 它真的很大。

【讨论】:

  • 我尝试了这些步骤。 “go get”输出 -> $GOPATH/go.mod 存在但不应该
  • 我不认为它工作得很好。我遇到了这个 mod 的多个问题。我设置 GOMOD="" 来解决一个问题,然后它开始给我另一组错误。为什么这个模组如此混乱!请帮忙。我已经开始收到另一个错误,例如 package server/api: directory "/xxx//src/server/api" is not using a known version control system
  • "go get" 对我有用。但是现在当我构建时,出现以下错误 - 无法加载包:package ./pkg/mod/cloud.google.com/go@v0.38.0: cannot use path@version syntax in GOPATH mode
【解决方案2】:

我的项目结构如下 -

/User/xxxx/projects/projectname 所有项目所在的位置。 GOPATH 设置为 /User/xxxx/projects/projectname。 Makefile 放置在这里。 然后我有一个“src”目录,在它下面有 “服务器”目录。 “server”目录有 Server.go,其中有“main”。 在服务器目录下还有其他包。其中之一是“云”,它有一个导入的 go 文件
“golang.org/x/net/context” “golang.org/x/oauth2/google”

现在我的困惑是,这个 go.mod 应该在哪里以及我从哪里执行 go mod?即使在设置 GO111MODULE=on 之后,我也会收到错误
go: 无法确定源目录 /Users/xxx 的模块路径(在 GOPATH 之外,没有导入 cmets)

我在网上找不到合适的文档。他们都在谈论创建一个目录并添加一个 main.go。导入少量第三方并构建。这没有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    相关资源
    最近更新 更多