## Goland
通常情况下,我们都会使用 IDE 来开发 Go,可以帮助我们代码提示和自动管理依赖等。
## 配置 Project
当我们使用 `mix` 命令创建应用骨架后,我们直接使用 Goland 的 File -> Open 菜单直接打开创建的骨架目录,然后打开 `Preferences` 配置界面,配置如下:
![](https://img.kancloud.cn/1c/1a/1c1a88631a959d034bcf9dda6c7efdcb_720x529.png)
配置这个的作用是:让 Goland 可以自动找到依赖的源码位置,实现依赖库的代码提示。
## 编译与执行
只需在 `main.go` 文件的 `main` 方法的剪头位置点击即可编译并直接执行,但是由于 mix 需要依赖 .env 等配置文件,**所以编译的二进制必须指定到 `Project/bin` 目录,默认编译到的目录执行后会抛出异常。**
![](https://img.kancloud.cn/5b/60/5b60c2bfc014be8a7713bb312d25d997_933x652.png)
执行一次后,Run -> Run 菜单就会有刚才执行的历史记录,我们只需要修改这个历史配置即可。
![](https://img.kancloud.cn/63/2b/632b064d330d090b58abe74bf273849e_1272x772.png)
修改这个配置的 `Output directory` 到 `Project/bin` 目录。
![](https://img.kancloud.cn/6f/7a/6f7a1d3134002bdf17a14a8c8ceffe6a_1071x787.png)
保存以后,再次点击 `main.go` 文件的 `main` 方法的剪头或者点击 Run -> Run 菜单手动选择执行,编译后的二进制能在 `Project/bin` 目录中看到。
![](https://img.kancloud.cn/c3/be/c3be99792e9ca2b1d2723cc65cc785b7_762x614.png)
## 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` 中生成对应系统的编译文件。
![](https://img.kancloud.cn/76/51/7651561e86c7ee7c4ce102d76557fca0_1071x787.png)