## Goland
通常情況下,我們都會使用 IDE 來開發 Go,可以幫助我們代碼提示和自動管理依賴等。
## 配置 Project
當我們使用 `mix` 命令創建應用骨架后,我們直接使用 Goland 的 File -> Open 菜單直接打開創建的骨架目錄,然后打開 `Preferences` 配置界面,配置如下:

配置這個的作用是:讓 Goland 可以自動找到依賴的源碼位置,實現依賴庫的代碼提示。
## 編譯與執行
只需在 `main.go` 文件的 `main` 方法的剪頭位置點擊即可編譯并直接執行,但是由于 mix 需要依賴 .env 等配置文件,**所以編譯的二進制必須指定到 `Project/bin` 目錄,默認編譯到的目錄執行后會拋出異常。**

執行一次后,Run -> Run 菜單就會有剛才執行的歷史記錄,我們只需要修改這個歷史配置即可。

修改這個配置的 `Output directory` 到 `Project/bin` 目錄。

保存以后,再次點擊 `main.go` 文件的 `main` 方法的剪頭或者點擊 Run -> Run 菜單手動選擇執行,編譯后的二進制能在 `Project/bin` 目錄中看到。

## Go Mod Vendor 使用
`go mod vendor` 是將所有依賴全部從項目中的 vendor 目錄中加載,默認 Go Mod 是直接使用 `$GOPATH/pkg/mod` 下的依賴文件進行加載編譯,項目的 `go.mod` 文件里記錄的依賴庫的版本號,在其他電腦依然可以自動裝載對應版本,因此默認不需要使用 `go mod vendor` 這個功能,也就是項目中默認不需要 `vendor` 目錄,但是有些 github.com 上面的項目有可能隨著時間的推移,倉庫被移除了,這個時候通常也可以使用 `go.mod` 的 `replace` 功能替換為本地的代碼來解決,當然使用 `go mod vendor` 也可以解決,官方發明這個的初衷也是解決這個問題。
- 首先在 Goland 中 `Preferences` 的 Go Modules 中開啟 `Vendoring mode`
- 然后在當前項目的命令行執行 `go mod vendor` 將對應的依賴版本復制到項目根目錄的 `vendor` 中,注意:后面每次更新 `go.mod` 的依賴后,都需要執行這個命令同步最新依賴庫文件到 `vendor` 中。因為每次都需要同步,所以通常大家很少使用這個功能,當遇到倉庫被移除也都是使用 `replace` 來解決。
## 交叉編譯
Golang 本身支持 [交叉編譯](https://www.jianshu.com/p/4b345a9e768e),也就是說可以在當前系統編譯任意其他系統的二進制,因此部署時可以只部署 `bin`、`conf` 目錄和 `.env` 環境配置即可,在 Goland 中我們可以這樣配置:
- 復制一個配置項目,修改名稱為 `foo` 這個是編譯后的二進制文件的名稱。
- 取消 `Run alter build` 選項,這樣就只執行編譯。
- 在 `Environment` 增加交叉編譯系統信息的環境變量。
- 執行后即可在 `Project/bin` 中生成對應系統的編譯文件。
