【问题标题】:Setting `GOPATH` for each vscode project为每个 vscode 项目设置 `GOPATH`
【发布时间】:2016-11-21 07:58:57
【问题描述】:

GOPATH 变量全局设置为环境变量适用于 Visual Studio Code。

但全局设置项目特定变量对我来说似乎不是很好。假设您有多个 Go 项目,每次编译、调试等项目时都必须更改此变量。

是否可以在 Visual Studio Code 中将 GOPATH 变量设置为项目变量? settings.jsonlaunch.json 中的以太币?

【问题讨论】:

标签: go visual-studio-code


【解决方案1】:

在windows中设置workspace settings

  1. 转到设置:ctrl+,
  2. 设置工作区设置:

    { 
         "go.gopath": "d:\\gopath;E:\\src"
    }
    

; 用于多路径

  1. 重启Visual Studio代码生效。

【讨论】:

  • 为 VS Code 设置默认的 GOPATH 是正确的。就我而言,当 VSCODE 仍然指向旧的 GOPATH 时,我有一个不同的 GOPATH。因此,我添加了这个配置和 “go.toolsGopath”: “/Users/user/go/” 来告诉 VS Code 在正确的 GOPATH 中安装工具。感谢分享
【解决方案2】:

如果你的 VSCode 项目目录是有组织的,

  1. 进入设置
  2. 搜索“Infer Gopath”或在 Extensions/Go 下找到此条目
  3. 选中该框

然后 VSCode 从您的工作区根目录推断 GOPATH,这立即解决了我的问题。我相信这在其他答案中得到了解释。我发布这个只是为了提供一个更短的版本。

【讨论】:

    【解决方案3】:

    (2018 年第二季度: 请注意,使用vgo projectGOPATH 可能最终会被弃用,而支持基于项目的工作流。这将避免两年前我在下面提出的基于手动项目的GOPATH

    使用 Go 1.11(2018 年 8 月),GOPATH can be optional, with modules

    VSCode 越来越支持它:


    除了供应商文件夹,每个项目您仍然可以拥有一个GOPATH

    见“GOPATH from go.inferGopath setting”:

    GOPATH 来自go.inferGopath 设置

    设置 go.inferGopath 会覆盖以上所有内容。
    如果go.inferGopath 设置为true,则扩展程序将尝试从工作空间的路径(即在vscode 中打开的目录)推断GOPATH。它在路径中向上搜索src 目录,并将GOPATH 设置为上一层。

    例如,如果您的项目看起来像/aaa/bbb/ccc/src/...,那么打开目录/aaa/bbb/ccc/src(或低于该目录的任何内容)将导致扩展向上搜索,在路径中找到src 组件,并设置@ 987654344@ 上一级,即GOPATH=/aaa/bbb/ccc

    当您处理具有不同 GOPATHs 的不同 Go 项目时,此设置很有用。无需在每个项目的工作区设置中设置GOPATH 或将所有路径设置为;/: 分隔字符串,您只需将go.inferGopath 设置为true,扩展程序自动使用正确的GOPATH

    GOPATH 使用 go.toolsGopath 安装 Go 工具

    默认情况下,所有依赖的 Go 工具都是从上述逻辑派生的GOPATH 使用的。
    如果它们在您的 PATH 上可用,则 PATH 用于定位 Go 工具。
    如果 Go 工具不在您的路径中,您最终可能会在每个 GOPATHs 中安装相同的 Go 工具。
    为防止 Go 工具将您的 GOPATH 弄乱,请使用 go.toolsGopath 设置为 Go 工具提供单独的位置。

    第一次设置 go.toolsGopath 时,您必须运行 Go: Install Tools 命令,以便将 Go 工具安装在提供的位置。

    【讨论】:

    • inferGopathtoolsGopath 很棒。谢谢
    • @merito 确实如此,但请注意,现在 Go 模块(1.11+)已过时:github.com/golang/go/wiki/Modules。我已经相应地编辑了答案。
    【解决方案4】:

    GOPATH 是您的工作区,它被划分为

    GOPATH/
        |- bin/
        |- pkg/
        |- src/ <--- your projects are saved here
            |- .../my_project1
            |- .../my_project2
    

    通过这种分离,您无需为每个项目设置新的 GOPATH。我建议你阅读How to Write Go Code

    【讨论】:

    • 当您有一个包含不同语言的不同项目的解决方案时,这还不够。
    • 不同语言是什么意思? GOPATH 只是你的 golang 项目的工作区。如果您使用其他语言,它们不受 GOPATH 环境变量的影响。如果您正在考虑版本控制,供应商目录就是您的解决方案。
    • 考虑到你正在编写许多微服务的应用程序,每个微服务都用Go 编写,其他的用C++JavaScript 编写,等等。然后你的工作区树看起来很奇怪......
    • 有用的答案。这是一种愚蠢的设计,它假设您只希望一个目录中的所有go 代码:$GOPATH/src,但是如果我想要在我的机器上拥有多个$GOPATH/src 文件夹怎么办?
    【解决方案5】:

    Go 1.5 添加了允许每个项目依赖管理的供应商目录。

    如果有一个源目录 d/vendor,那么,在以 d 为根的子树中编译源文件时,如果该路径命名的目录包含至少有一个名称以“.go”结尾的文件。

    source

    Go 1.6 已默认启用此功能:

    Go 1.5 引入了对由环境变量启用的“供应商”目录的实验性支持。在 Go 1.6 中,该功能现在默认启用。

    source

    即使是 1.6 版本,根据您使用的工具,您可能需要将 GO15VENDOREXPERIMENT 环境变量设置为 1(在基于 unix 的操作系统上为 export GO15VENDOREXPERIMENT=1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-26
      • 1970-01-01
      • 2010-11-02
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多