在 PowerShell 中,设置环境变量的语法与 cmd 不同。你需要使用 $env: 来设置环境变量。这里是你如何在 PowerShell 中进行交叉编译:

1. 设置环境变量

$env:GOOS="linux"
$env:GOARCH="amd64"

这将设置目标操作系统为 linux,架构为 amd64,并使其在当前 PowerShell 会话中生效。

2. 编译 Go 程序

然后你可以继续使用 go build 来编译程序:

go build -o myprogram

3. 恢复环境变量(可选)

如果你不再需要这些环境变量,可以清除它们:

Remove-Item Env:GOOS
Remove-Item Env:GOARCH

以完整的示例演示

假设你在 Windows 上的 PowerShell 终端中,想要从 GitHub 克隆一个 Go 项目并编译成可以在 Alpine Linux 上运行的二进制文件。你可以按照以下步骤进行:

  1. 克隆 GitHub 项目
git clone https://github.com/username/repository.git
cd repository
  1. 设置交叉编译环境变量
$env:GOOS="linux"
$env:GOARCH="amd64"
  1. 编译程序
go build -o myprogram
  1. 传输到 Linux Alpine 系统(你可以使用 SCP、FTP 等工具上传到你的目标服务器)

总结

在 PowerShell 中设置环境变量的方式是:

$env:VARIABLE_NAME="value"

然后你就可以像在 cmd 中一样运行 go build 来交叉编译你的程序了。

查看当前环境变量是否设置成功

要查看是否成功设置了环境变量,可以使用以下命令:

$env:VARIABLE_NAME

例如,如果你设置了 GOOS,可以这样查看:

$env:GOOS

如果返回的值是你设置的 linux,则说明环境变量设置成功。

如何设置 Go 使用系统代理

你可以通过设置 Go 环境变量来让 Go 使用系统代理。具体来说,你需要设置以下几个环境变量:

  • HTTP_PROXY:用于设置 HTTP 请求的代理。
  • HTTPS_PROXY:用于设置 HTTPS 请求的代理。
  • NO_PROXY:用于设置哪些地址不走代理。

设置步骤

假设你的代理地址是 http://proxy.example.com:8080,你可以在 PowerShell 中执行以下命令来设置这些环境变量:

$env:HTTP_PROXY="http://proxy.example.com:8080"
$env:HTTPS_PROXY="http://proxy.example.com:8080"

如果你的代理服务器需要身份验证,你可以提供用户名和密码,像这样:

$env:HTTP_PROXY="http://username:password@proxy.example.com:8080"
$env:HTTPS_PROXY="http://username:password@proxy.example.com:8080"

配置 NO_PROXY

如果你希望在某些情况下跳过代理(例如,当访问某些内网地址时),你可以设置 NO_PROXY 环境变量。例如,如果你不想通过代理访问 localhost127.0.0.1,可以这样设置:

$env:NO_PROXY="localhost,127.0.0.1"

永久设置代理

如果你希望每次启动 PowerShell 时都自动使用这些代理设置,可以将这些环境变量添加到 PowerShell 的配置文件中。编辑 PowerShell 配置文件 $PROFILE(如果文件不存在,可以创建它)并添加如下内容:

$env:HTTP_PROXY="http://proxy.example.com:8080"
$env:HTTPS_PROXY="http://proxy.example.com:8080"
$env:NO_PROXY="localhost,127.0.0.1"

使用 go env 检查设置

设置好代理后,你可以使用以下命令来检查 Go 的环境变量,确认是否设置正确:

go env

这将显示 Go 的所有环境变量,包括代理相关的设置。如果 HTTP_PROXYHTTPS_PROXY 被正确设置,你应该能在输出中看到它们的值。

总结

  1. 设置 HTTP_PROXYHTTPS_PROXY 来让 Go 使用系统代理。
  2. 如果需要,配置 NO_PROXY 来排除某些地址不走代理。
  3. 可以将这些设置添加到 $PROFILE 文件中,使其永久生效。