From 0477cb64274b43ae27d58b70e13ed6d0a0429408 Mon Sep 17 00:00:00 2001 From: zyj <18107291228@163.com> Date: Fri, 24 Oct 2025 17:50:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Ego=E4=B8=8B=E8=BD=BD=E4=BE=BF?= =?UTF-8?q?=E6=90=BA=E5=AE=89=E8=A3=85=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install/go.bat | 110 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 install/go.bat diff --git a/install/go.bat b/install/go.bat new file mode 100644 index 0000000..8700c49 --- /dev/null +++ b/install/go.bat @@ -0,0 +1,110 @@ +@echo off +setlocal enabledelayedexpansion + +rem ---------- 参数 ---------- +if "%~1"=="" ( + set "GO_VERSION=1.25.3" +) else ( + set "GO_VERSION=%~1" +) +if "%~2"=="" ( + set "REL_DEST=..\plugin\go\%GO_VERSION%" +) else ( + set "REL_DEST=%~2" +) + +rem ---------- 环境与路径 ---------- +rem 将脚本目录解析为绝对路径 +set "SCRIPT_DIR=%~dp0" +rem 去掉末尾反斜杠(如果有) +if "%SCRIPT_DIR:~-1%"=="\" set "SCRIPT_DIR=%SCRIPT_DIR:~0,-1%" + +rem 目标目录(相对于脚本目录) +for %%I in ("%SCRIPT_DIR%\%REL_DEST%") do set "DEST=%%~fI" + +rem 构造下载 URL(windows-amd64) +set "ARCH=windows-amd64" +set "FILE=go%GO_VERSION%.%ARCH%.zip" +set "URL=https://go.dev/dl/%FILE%" + +rem 临时下载文件 +set "TMP_ZIP=%TEMP%\%FILE%" + +echo. +echo Script dir: %SCRIPT_DIR% +echo Go version: %GO_VERSION% +echo Destination: %DEST% +echo Download URL: %URL% +echo Temp zip: %TMP_ZIP% +echo. + +rem ---------- 创建目标目录 ---------- +if not exist "%DEST%" ( + mkdir "%DEST%" + if errorlevel 1 ( + echo Failed to create destination directory "%DEST%". + exit /b 1 + ) +) + +rem ---------- 下载(使用 PowerShell 的 Invoke-WebRequest) ---------- +echo Downloading %URL% ... +powershell -NoProfile -ExecutionPolicy Bypass -Command ^ + "try { Invoke-WebRequest -Uri '%URL%' -OutFile '%TMP_ZIP%' -UseBasicParsing -ErrorAction Stop; exit 0 } catch { Write-Error $_; exit 1 }" +if errorlevel 1 ( + echo Download failed. Please check network or URL. + exit /b 1 +) + +rem ---------- 解压(使用 PowerShell Expand-Archive) ---------- +echo Extracting to %DEST% ... +powershell -NoProfile -ExecutionPolicy Bypass -Command ^ + "try { if (Test-Path '%DEST%\go') { Remove-Item -Recurse -Force '%DEST%\go' } ; Expand-Archive -Path '%TMP_ZIP%' -DestinationPath '%DEST%' -Force; exit 0 } catch { Write-Error $_; exit 1 }" +if errorlevel 1 ( + echo Extraction failed. + exit /b 1 +) + +rem ---------- 处理官方 zip 解压后包含的 go 子文件夹(将 go/* 移到 DEST 根) ---------- +rem 有时 Expand-Archive 会在 DEST 中创建一个子目录 'go',这里把其内容上移 +if exist "%DEST%\go\" ( + echo Normalizing folder structure... + powershell -NoProfile -ExecutionPolicy Bypass -Command ^ + "Get-ChildItem -Path '%DEST%\go' -Force | ForEach-Object { Move-Item -Path $_.FullName -Destination '%DEST%' -Force } ; Remove-Item -Recurse -Force '%DEST%\go'" + if errorlevel 1 ( + echo Normalization failed. + exit /b 1 + ) +) + +rem ---------- 清理临时 zip ---------- +if exist "%TMP_ZIP%" del /q "%TMP_ZIP%" + +rem ---------- 验证 go 可执行 ---------- +set "GO_EXE=%DEST%\bin\go.exe" +if exist "%GO_EXE%" ( + echo. + echo go executable found at: %GO_EXE% + echo Running: "%GO_EXE%" version + "%GO_EXE%" version +) else ( + echo go.exe not found under "%DEST%\bin\". Extraction may have failed. + exit /b 1 +) + +rem ---------- 使用提示 ---------- +echo. +echo 完成: Go %GO_VERSION% 已解压到: +echo %DEST% +echo. +echo 临时会话使用(仅当前窗口有效): +echo set GOROOT=%DEST% +echo set PATH=%DEST%\bin;%%PATH%% +echo. +echo 若要在脚本中立即使用该 go,请在调用命令时用绝对路径: +echo "%DEST%\bin\go.exe" build -o myapp.exe ./cmd/myapp +echo. +echo 注意: 本脚本未修改系统环境变量, 若需永久生效请手动添加 GOROOT 和 PATH. +echo. + +endlocal & pause