(2018 年第 2 四半期: vgo projectでは、プロジェクト ベースのワークフローを支持して廃止される可能性が
あることに注意してください。これにより、2 年前に以下で提案していた手動のプロジェクト ベースを回避できます)GOPATH
GOPATH
Go 1.11 (2018 年 8 月) ではGOPATH
、モジュールを使用してオプションにすることができます。
VSCode でのサポートがますます増えています。
2016 年 6 月: 1 つだけに依存する必要はありませんGOPATH
(つまり、1 つのワークスペース)。
私の完全なGOPATH
内容:
それは 2 つのパスです。
export GOPATH=/path/to/myproject:$HOME/go
すべてのプロジェクトに 1 つの $GOPATH ディレクトリを使用するのは安全ではないので、必要なすべてのサードパーティ ライブラリが同じ lib ディレクトリにインストールされ、プロジェクトをコンパイルするたびに必要なライブラリが使用されます。
これは実際には悪いですか?なんで?
異なるプロジェクトでは同じライブラリの異なるバージョンが必要になる可能性があるため、私はそのような慣行は好きではありません。
そのためGOPATH
、ビルド スクリプト (プロジェクトでバージョン管理されている) が設定するプロジェクトごとに 1 つ持っています。
私の go プロジェクトのクローンを作成すると、次のようになります。
- そのgoプロジェクトに設定
GOPATH
します(そのプロジェクトに必要なサードパーティライブラリがインストールされ、vendor
フォルダーに移動されるローカルパス)、
- そのパスへのシンボリックリンクを作成します
<myproject>/src/<myproject> -> ../..
。これは、 go がinGOPATH
のソースを見つけることを期待しているためです。myproject
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
」と入力します。