当前位置: 首页 > 面试题库 >

有关$ GOPATH的一些问题

申光临
2023-03-14
问题内容

我是一名新的golang开发人员,我想知道为什么$GOPATH需要在项目的根目录设置环境变量。

如果我同时从事多个项目,则每次都需要重新设置$GOPATH环境变量以指向不同的位置。

在我的设置中,我已$GOPATH设置为/Users/Projects/go/lib。这是我所有golang项目的通用目录。

只是为了澄清:将项目数据放入 /Users/Projects/go/<Project Name>

如果$GOPATH(据我所知)全部用于安装第三方库,那么$GOPATH为我所有的项目提供一个目录并不安全,因此所有必需的第三方库都安装在同一lib目录中,并且每当我在项目上进行编译时,它只会使用所需的库。

在实践中这不好吗?为什么?


问题答案:

(2018年第二季度:
请注意,对于 vgo项目
GOPATH可能最终不赞成使用基于项目的工作流。这样可以避免GOPATH两年前我在下面提出的基于手动项目的建议)

使用Go 1.11(2018年8月), GOPATH
可以是可选的,带有modules

VSCode越来越支持它:

  • vscode-go / issue 1532
  • “ Visual Studio Code中的Go模块支持 ”

2016年6月:您不必
依赖一个GOPATH(即一个工作区)。

我的全部GOPATH内容包括:

  • 一个全球性的路径(所有公用事业喜欢goimports),github.com/smartystreets/goconvey…),在$HOME/go例如,
  • 本地路径(我当前的项目),在我的地方srcpkg并且bin会。

这是两条路径:

export GOPATH=/path/to/myproject:$HOME/go

为我的所有项目都拥有一个$ GOPATH目录是不安全的,因此所有必需的第三方库都安装在同一个lib目录中,并且每当我编译项目时,它都将使用所需的库。

在实践中这不好吗?为什么?

我不喜欢这种做法,因为不同的项目可能需要同一个库的不同 版本
这就是为什么GOPATH每个项目都有一个,我的构建脚本(随项目版本化)为我设置的原因。

当我克隆我的go项目时,我:

  • 将我GOPATH设置为该go项目(本地路径,将安装该项目所需的第三方库,并将其移至vendor文件夹中),
  • 与该路径进行符号链接<myproject>/src/<myproject> -> ../..,因为GOPATH手段go希望找到myprojectin 的来源src/<apackage>

该组织:

  • 保持兼容go get
  • 确保默认情况下,将我需要的所有特定依赖项安装在我的项目文件夹中,而不是在global中存在的大量全局库/实用程序中丢失GOPATH

我有:

myproject
   mysource.go
   apackage
     othersource.go
   src
     myproject -> ../..
     vendor
        third-party packages

在Windows上,典型的构建脚本为:

λ more b.bat
@echo off
setlocal EnableDelayedExpansion
if not defined GOROOT (
        echo Environment variable GOROOT must be defined, with %%GOROOT%%\bin\go.exe
        exit /b 1
)

set PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
set PATH=%PATH%;%GOROOT%/bin
set GOPATH=%~dp0;%HOME%/go

set prjname=%GOPATH:~0,-1%
for %%i in ("%prjname%") do set "prjname=%%~ni"
rem echo prjname='%prjname%'

if not exist src (
        mkdir src
)
if not exist src\%prjname% (
        mklink /J src\%prjname% %GOPATH%
)

pushd %~dp0
cd src\%prjname%
rem cd
go install
popd
endlocal

克隆我的go项目的任何人都只需键入“ b”。



 类似资料:
  • 问题内容: 我如何通过获得所有声明的方法?如何获取所有声明的字段? 有什么区别,和 另外,对于使用MethodHandle API for Java devloper的 教程,我将不胜感激。我强调,我是在使用静态类型语言的普通Java上编程的,并且我不是JVM开发人员,尤其是我对整个字节码废话(invokedynamic)不感兴趣。我想弄清楚如何使用此新API代替Java Core API。 编辑

  • 各位大佬,我想问一下在开源项目Answer中的几个问题 answer开源项目是否支持LDAP answer开源项目是否支持webhook

  • 问题内容: 我今天发现了JPA 2.0 Criteria API,并想学习它。只是通过一些例子,尝试动手。我的桌上有水果列: ID, 名称, 颜色, 尺寸, 味道。 常规的东西: 如何使用条件构建以下查询: 即如何: 同样,在获取实际数据之前先获取结果计数总是更好的选择。我如何首先获取结果计数? 还有什么地方可以通过几种不同类型的SQL查询获得有关“条件”的更多示例? 问题答案: 首先,您要对实体

  • 关于cesium的一些报错问题,现在出现这些报错 还有上下文丢失的情况,因为不懂cesium,有人帮忙排查下问题吗

  • 我对使用REST API的订阅功能有一些疑问。我们已经使用“快速结账NVP/SOAP集成”实现了定期支付,但对我们来说这不是最佳选择,因为: Webhooks比IPN消息更容易、更可用; 我们不能强迫顾客从PayPal余额中付款。 所以我想用REST API重写。我认为流程会是这样的: < li >用户按下按钮,我们第一次请求获取身份验证令牌; < li >创建计费计划; < li >启用计费计划

  • 我不熟悉python,但精通java。现在我在python3.5上训练时面临一个恼人的问题,我有这样一个src结构: 在main.py中: 在modulescript.py: 在BaseModel.py: 在BaseAction.py中: 在ModelImpl.py中: 在ActionImpl.py中: 现在,当我输入python3main.py在终端,我得到打印结果: 但如果我输入python3