如何为使用bazel构建的Go项目设置vscode?

8

我正在尝试使用VScode浏览gVisor的代码。

然而,与其他Go项目不同,gVisor是使用 bazel构建的,并且源代码没有位于$GOROOT$GOPATH下。可能这就阻止了VSCode Go扩展搜索gVisor包。除了定义可以在相同目录下找到的情况外,大多数情况下都无法使用跳转到定义命令。

如何设置VSCode以处理bazel Go项目?特别是gVisor。谢谢!

2个回答

3

链接的 gVisor 规则现在代理 一个更加规范的实现

这个设置对我有效:

  1. 在你的工作区根目录下的 BUILD 文件中,你可以添加以下构建规则
# in BUILD.bazel
load("@io_bazel_rules_go//go:def.bzl", "go_path")

go_path(
    name = "gopath",
    mode = "link",
    deps = [
        "//my/binary/here",
        "//any/other/binaries/you/want/linked",
    ],
)

如果您尚未为 bazelbuild/go_rules 导入 gazelle,那么您需要为 bazel 导入它。
# in WORKSPACE
http_archive(
    name = "io_bazel_rules_go",
    sha256 = "8e968b5fcea1d2d64071872b12737bbb5514524ee5f0a4f54f5920266c261acb",
    urls = [
        "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.28.0/rules_go-v0.28.0.zip",
        "https://github.com/bazelbuild/rules_go/releases/download/v0.28.0/rules_go-v0.28.0.zip",
    ],
)

构建此命令以在您的blaze-out中创建一个符号链接文件夹,位于,其中包含指向每个依赖项的链接。每次添加新的依赖项时,您都需要执行此操作。您将看到每个符号链接创建的行。
bazel build :gopath

(假设您正在使用带有Golang扩展的VSCode)将您的工作区设置为go扩展指向此gopath。请注意,为使此操作起作用,您需要将其设置为受信任的工作区扩展。
// In .vscode/settings.json
{
    "go.gopath": "/YOUR ABSOLUTE PATH TO YOUR WORKSPACE//bazel-bin/gopath"
}
  1. 重新启动VSCode

  2. 享受吧!

注意:如果您的根目录中有go.mod文件,则此方法不起作用。


2
最近gVisor添加了一个gopath BUILD rule,可以从源代码创建一个规范的GOPATH目录树。
您可以使用VScode更有效地编辑它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接