如题,操作系统是 win10,golang 的环境变量配置应该是没问题的
不知道为啥 执行 go 的命令,总是偶尔提示不是可运行的程序, 比如 go version , go build
然后把 cmd 窗口关掉,再打开又好了,然后过几天又出现了相同的问题
大家有碰到过这种情况吗?
试过 go 1.11 ,1.12 版本都有这个情况。
相同的机器上面,cmd 窗口 执行 java 命令就一直没有问题,稳如老狗
1
misaka19000 2019-06-28 16:12:01 +08:00
也许是 win10 的 bug
|
2
Buffer2Disk OP |
3
holajamc 2019-06-28 17:06:33 +08:00
偶尔 一直
总是 偶尔 所以…… |
4
geelaw 2019-06-28 17:23:17 +08:00 via iPhone 1
@misaka19000 #1 微软真惨,什么锅都能被甩到自己头上
我来试试念力 debug 法:楼主说关掉 cmd 再打开就又正常了,一个简单的假设是有些程序修改了正在运行的 cmd 的(进程级别)环境变量,尤其是 PATH,例如可能会在 PATH 的开头追加一些目录(并且忘记判断是否 PATH 已经含有需要路径而无脑增加),但是环境变量的总长度有限制,所以随着修改的次数增加,go 所在的目录就被挤掉了。 要判断是否有此事发生,首先考虑是否在命令中有 .bat/.cmd ,这些最容易修改 cmd 的环境变量。找到目标后阅读代码寻找 set 命令。 另一种判断方法是写一个程序,它的作用是查看自己的环境变量并和一个磁盘上的存档对比,如果不同则发出提示,如果磁盘上没有则把自己的环境变量存到磁盘上。如果可以同时运行多个 cmd,那么这个程序应该根据自己父进程的 PID 决定哪一个存档应该被检查。 接着在所有的命令后都追加调用该程序,即可看出哪两个命令之间 cmd 的环境变量发生了变化,从而定位问题所在。 |
6
Buffer2Disk OP @geelaw 大兄弟,首先感谢你的回复,看起来非常有道理
但是,我的情况是,重新打开 cmd 就正常的几率非常低,大部分情况下,重新打开 cmd 还是老样子 有时候重新设置一下环境变量(一模一样的环境变量),又好了(不是每一次都能成功) 综上这么诡异的情况,所以无法判断到底是哪里出了问题 而且你看我也说了,相同的情况下,java 的命令是一直正常的,所以我都不知道这个锅该甩给微软还是 golang 了 |
7
Buffer2Disk OP @geelaw 不过你给的方法不错,但是看起来很麻烦的样子,毕竟我不会写 bash = =
|
8
Buffer2Disk OP @Buffer2Disk 打错,bash --> bat
|
9
geelaw 2019-06-28 18:13:51 +08:00
@Buffer2Disk #6 你一开始并没有提到重新打开正常的概率很低。(你真的读了自己写了什么吗?!
你说重新设置环境变量就好了,那么你查看不能运行的时候 cmd 的环境变量了吗?用 set 命令可以查看。另外除了 PATH 会影响结果,PATHEXT 也有很大影响。 从目前的信息来看,没有理由怀疑是 Windows 的问题。 |
10
Humorce 2019-06-28 18:18:53 +08:00
用 Administrator 登录的?
|
11
oneonesv 2019-06-28 18:23:50 +08:00 via Android
请先搞明白环境变量
|
12
unknowncheater 2019-06-28 19:03:40 +08:00
畢竟是三哥維護的系統,Bug 多正常
|
13
dandycheung 2019-06-28 20:36:50 +08:00 via iPhone
如果现实不是可运行的程序,说明可执行体已经找到了,而不能执行,是不是,硬盘出了什么读写不稳定的状况?
|
14
blless 2019-06-28 20:45:01 +08:00 via Android
好歹打印一下环境变量,然后确定环境变量下进入目录打印一下截图再来说嘛
|
15
Buffer2Disk OP @oneonesv 大佬,请你来解释一下什么是环境变量
|
16
Buffer2Disk OP |
17
Buffer2Disk OP @dandycheung 没有吧,java 的可执行体是放在同一个 E 盘下的,没问题
|
18
WordTian 2019-06-28 22:16:42 +08:00 via Android
你的环境变量里用了相对引用吗?
感觉 win10 加载环境变量好像是随机加载的。如果用了相对引用的话,可能是加载环境变量的时候,被引用的环境变量还没被加载导致的 |
19
Buffer2Disk OP @WordTian 对,go 的是相对的;
但是 java 的也是相对的啊,一直都可以 |
20
WordTian 2019-06-28 22:28:20 +08:00 via Android
@Buffer2Disk 我的 java 和 python 环境变量也是因为这种情况时好时坏的,后来改成绝对路径就好了。不过感觉绝对路径还是不太方便
|
21
forcecharlie 2019-06-29 07:00:47 +08:00 via iPhone
这种问题基本上是环境变量设置顺序有关 如果相对路径的环境变量未在 path 之前设置开则不行, 然后再次 set path=%path% 则因那个环境变量已设置则可以在 path 之间展开 通过计算机属性设置环境变量通常要注意这个问题,这应该跟注册表有关。 如果你在 bat 文件中设置环境变量 则不会出现上述问题 bat 文件严格按照你预期的顺序初始化。
|
22
Buffer2Disk OP |
23
WordTian 2019-07-07 02:04:20 +08:00 via Android
@Buffer2Disk 系统变量设完要重启啊,大兄弟
|