コンピューターのどこからでもbashコマンドで実行できるようにインストールしたいコンパイル済みのGolangプログラムがある場合、どうすればよいですか?たとえば、nodejs
npm install -g express
コマンドを実行できるようにExpressをインストールします
express myapp
エクスプレスは、現在のディレクトリが何であれ、「myapp」と呼ばれるノードアプリケーションのファイルディレクトリを生成します。 goに相当するコマンドはありますか? 「go install」コマンドでは、実行するために実行可能ファイルを含むディレクトリにいる必要があると思います
前もって感謝します!
私の知る限り、npm install -g
に直接相当するものはありません。最も近いものはgo install
ではなくgo get
になります。ヘルプページ(go help get
)から:
使用法:
go get [-d] [-f] [-fix] [-insecure] [-t] [-u] [build flags] [packages]
インポートパスで指定されたパッケージとその依存関係をダウンロードしてインストールします。
デフォルトでは、go get
はバイナリを$GOPATH/bin
にインストールするため、これらのバイナリをどこからでも呼び出せるようにする最も簡単な方法は、そのディレクトリを$PATH
に追加することです。
これには、次の行を.bashrc
(または使用しているシェルに応じて.zshrc
)に挿入します。
export PATH="$PATH:$GOPATH/bin"
または、実行可能ファイルを/usr/local/bin
にコピーまたはリンクすることもできます。
ln -s $GOPATH/bin/some-binary /usr/local/bin/some-binary
Go> = 1.11を使用すると、現在のディレクトリがモジュールベースのプロジェクト内にある場合、または環境でGO111MODULE=on
を設定している場合、go get
はパッケージを「グローバルに」インストールしません。代わりにそれらをプロジェクトのgo.modファイルに追加します。
Go 1.11.1以降、GO111MODULE=off
を設定すると、この動作を回避できます。
GO111MODULE=off go get github.com/usr/repo
基本的に、この単一のコマンドのモジュール機能を無効にすることにより、期待どおりにGOPATHにインストールされます。
モジュールを使用しないプロジェクトでも、通常はgo get
を使用してバイナリを$GOPATH/bin
にインストールできます。
ここから分岐するこの動作の変更について、長い会話と複数の問題がログに記録されています: golang/go-cmd/go:go get should not add dependency to go.mod#27643 。
Goでこれに最も近いものはgo get
です。デフォルトでは、指定されたリポジトリURLからGoパッケージをフェッチします。また、シェルに$GOPATH
変数を設定して、Goがパッケージを保存する場所(およびコードをコンパイルするときにパッケージを見つける場所)を認識できるようにする必要があります。 go get
- tedパッケージ)。
構文例:
$ go get github.com/user/repo
npm
の-g
フラグによって提供される動作はデフォルトであり、go get
を使用してインストールされたパッケージは通常、グローバルに利用できます。
コマンドの詳細については、go get --help
を参照してください。
@helmbertで述べたように、スタンドアロンパッケージをインストールする場合は、$GOPATH
を$PATH
に追加すると便利です。
TL; DR下部にあります。この結論に至った経緯と、より明白な解決策が機能しない理由を説明します。
この質問を見て、「ルートのGOPATH=/usr
を設定できれば、/usr/bin/
と/usr/src
!にインストールできるだろう」と思った
だから私は明白なことを試しました:
GOPATH=/usr
をルートの.bashrc
に追加します。
そしてうまくいきました!
並べ替え。
あんまり。
締め切りました、Sudo
はルートの.bashrc
を実行しません。 「セキュリティ」またはそのようなもの。
env_set
または/etc/sudoers
の何かを実行します
ターンアウト、/etc/sudoers
はremove環境変数のみを許可します。 env_set
ディレクティブはありません。
(私が見つけることができる限り)
man sudoers
を掘り下げます。
Sudoはデフォルトの環境変数セットをどこから取得しますか?
まあ、リストの最初のものは/etc/environment
なので、それを使用しました。
Sudo echo "GOPATH=/usr" >> /etc/environment
Sudo go get <repo>
バイナリは/usr/bin
に入れられ、ソースは/usr/src
に入れられます。
非rootとしてgoを実行すると、GOPATHが「通常の」方法で使用されます。