[英]Golang equivalent of npm install -g
如果我有一個編譯好的 Golang 程序,我想安裝這樣我就可以在我的計算機上的任何地方使用 bash 命令運行它,我會怎么做? 例如,在 nodejs
npm install -g express
安裝 express 以便我可以運行命令
express myapp
express 會在我當前的目錄中為一個名為“myapp”的節點應用程序生成一個文件目錄。 go 是否有等效命令? 我相信現在使用“go install”命令,您必須在包含可執行文件的目錄中才能運行它
提前致謝!
使用 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 不應該添加對 go.mod #27643 的依賴。
據我所知,沒有直接等價於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
。
為此, .zshrc
下行放入您的.bashrc
(或.zshrc
,具體取決於您使用的外殼):
export PATH="$PATH:$GOPATH/bin"
或者,您也可以將可執行文件復制或鏈接到/usr/local/bin
:
ln -s $GOPATH/bin/some-binary /usr/local/bin/some-binary
在 Go 中最接近的類似物是go get
。 默認情況下,它將從提供的存儲庫 URL 獲取 Go 包,並需要在您的 shell 中設置$GOPATH
變量,以便 Go 知道在哪里存儲包(以及隨后在編譯代碼時根據go get
在go get
找到它們) -ted 包)。
示例語法:
$ go get github.com/user/repo
npm
的-g
標志提供的行為是默認的,使用go get
安裝的包通常是全局可用的。
有關該命令的更多信息,請參閱go get --help
。
正如@helmbert 所提到的,如果您要安裝獨立軟件包,將您的$GOPATH
添加到您的$PATH
很有用。
Linux 用戶的簡短解決方案:
go get
命令.bashrc
添加到.bashrc
:# This is the default GOPATH, you should confirm with the 'go env' command
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
TL; DR在底部。 我將向您介紹我是如何得出這個結論的,以及為什么更明顯的解決方案不起作用。
看到這個問題,我想“如果我可以設置 root 的GOPATH=/usr
,它會在/usr/bin/
和/usr/src
安裝東西!”
所以我嘗試了顯而易見的事情:
將GOPATH=/usr
添加到 root 的.bashrc
。
它奏效了!
有點。
並不真地。
事實證明, sudo
不執行 root 的.bashrc
。 為了“安全”或類似的東西。
在/etc/sudoers
做env_set
或其他東西
事實證明, /etc/sudoers
只能刪除環境變量。 沒有env_set
指令。
(據我所知)
挖掘man sudoers
。
sudo 從哪里獲得它的默認環境變量集?
好吧,列表中的第一個是/etc/environment
,這就是我使用的那個。
sudo echo "GOPATH=/usr" >> /etc/environment
sudo go get <repo>
二進制文件將放在/usr/bin
,源代碼將放在/usr/src
。
以非 root 身份運行 go 將以“正常”方式使用 GOPATH。
從 Go >= 1.16開始,推薦的安裝可執行文件的方法是使用
go install package@version
例如, go install github.com/fatih/gomodifytags@latest
。
可執行文件(主包)安裝到由指定的目錄GOBIN
環境變量,默認為$GOPATH/bin
或$HOME/go/bin
如果GOPATH
環境變量未設置。 您需要將此目錄添加到PATH
變量以全局運行可執行文件。 就我而言,我已將此行添加到我的~/.zshrc
文件中。 (如果您使用的是 bash,請將其添加到~/.bash_profile
文件中):
export PATH="$HOME/go/bin:$PATH"
我們曾經推薦使用 go get -u program 來安裝一個可執行文件,但是這種用法與 go get 在 go.mod 中添加或更改模塊版本要求的含義造成了太多混淆。
有關更多詳細信息,請參閱go install
文檔
如果你沒有安裝 go,你可以使用gobinaries 。 它從 github repo 構建項目的按需二進制文件。
安裝 go 包的命令是:
curl -sf https://gobinaries.com/rakyll/hey | sh
如果您使用的是 zsh:
首先:安裝您的 package 使用:
go install package@version
然后,您編輯 your.zshrc 文件
nano ~/.zshrc
將此行添加到 .zshrc 文件的末尾:
export PATH="$HOME/go/bin:$PATH"
最后但並非最不重要的:
source ~/.zshrc
然后打開一個新終端並執行您的命令:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.