golang在goland编译时获取环境变量失效

在golang中, 我们通常使用os包来获取环境变量,如:

os.Getenv()
os.LookupEnv()

等。

但如果我们使用goland编译器,在编译是,这时操作环境变量,会发现os包读取到的环境变量值不变:

        新增后,读到的值还是空值;

        修改后,读到的还是修改前的值。

排查了好久,才发现一些问题:

        goland在启动时,会加载环境变量,并在运行时缓存这些变量,导致在系统上操作缓存变更后,os包读到值不会变。

且,重启某个项目是无效的,需要关闭所有项目,把goland都关闭后,重新打开,才能生效。

但这个,其实很麻烦,每次一修改,就需要重启所有项目。

我只找到一个不是办法的办法,就是当你需要修改某个项目的环境变更且不想关闭其他项目时,可以在该项目启动的代码,或是新增一个临时项目,执行:

os.Setenv()

syscall.SetEnvironmentVariable()

去更新环境变量,然后再去掉代码(是有点麻烦)。

os.Setenv():只能单次生效

syscall.SetEnvironmentVariable():我还没测试过

我只用过goland编译器,不知道其他编译器会不会出现这种问题,或是哪位大神有其他解决办法,可以发评论告知下!

你可能感兴趣的:(golang,Go语言,golang,环境变量)