g icon indicating copy to clipboard operation
g copied to clipboard

Windows 11 LTSC 安装 go 卡 Checksums matched

Open wewindy opened this issue 8 months ago • 3 comments

Describe the bug/缺陷描述 安装 g install 1.23.2 卡 Checksums matched

To Reproduce/缺陷复现步骤

如下图所示:

CMD: Image

Powershell 7.5.2: Image

  • g -v
g version 1.8.0
Built:         2025-07-11 13:24:15
Git branch:    master
Git commit:    a82e89cc
Go version:    go1.20.14
OS/Arch:       windows/amd64
Experimental:  true
  • go env
G_HOME="C:\\Users\\j******en\\.g"
G_MIRROR=""
G_EXPERIMENTAL="true"

切换版本 1.24.5 也不行,重启过电脑,反复安装过 Windows Powershell,移除相关预加载插件,都无济于事,还有什么办法可以看看这个问题?

wewindy avatar Jul 28 '25 10:07 wewindy

  • 我没有相关的环境进行复现,只能做一些猜测:程序输出了Checksums matched,说明已经完成了 checksum 的验证,最可能是在新建符号链接切换版本的步骤上阻塞了。Windows 下的实现有别于其他 *nix ,会优先通过调用本地命令行完成符号链接的创建,可能就在这个地方阻塞了。以下是部分实现代码:
func mkSymlink(oldname, newname string) (err error) {
	if runtime.GOOS == "windows" {
		// Windows 10下无特权用户无法创建符号链接,优先调用mklink /j创建'目录联接'
		if err = exec.Command("cmd", "/c", "mklink", "/j", newname, oldname).Run(); err == nil {
			return nil
		}
	}
	if err = os.Symlink(oldname, newname); err != nil {
		return errors.WithStack(err)
	}
	return nil
}
  • 可以在 install 子命令后加上--nouse选项,即安装目标版本后不切换,如g install --nouse 1.25rc2。如果加上此选项后阻塞现象消失,可以部分印证是上述原因引起。

voidint avatar Jul 28 '25 12:07 voidint

如果要精确定位原因,就需要下载源代码逐行调试,看下阻塞在哪一行。

voidint avatar Jul 28 '25 12:07 voidint

  • Windows 11(Arm64)平台下,解压缩步骤耗费了很长时间,但可以正常完成安装;
  • 解压缩步骤待优化;

voidint avatar Aug 06 '25 14:08 voidint