有没有办法在Go中导入之前设置环境变量?

时间:2015-06-23 08:45:23

标签: go

我目前正在测试Go-SDL2 lib,只是为了好玩。我把二进制文件给了我的一个朋友,但是他的机器上没有安装SDL。所以我想要做的就是跳舞(是舞蹈)是用二进制文件分发4个.so库,以便在其他Linux机器上运行良好。实际上很简单,我只需要将LD_LIBRARY_PATH设置为指向当前文件夹即可。这是为了测试目的。

问题是,我必须先设置此环境变量 我可以导入go-sdl2 lib。现在我有一个单一的源文件(很明显是main.go)。

我怎样才能做到这一点? (它甚至可能吗?)

2 个答案:

答案 0 :(得分:1)

一个选项是在调用LD_LIBRARY_PATH之前设置一个设置go-sdl2环境变量的脚本(在同一个脚本中)。

另一个更有趣的选择是使用Docker image,根据该图像制作Dockerfile,然后安装SDL并进入其中(如didstopia/sdl2 ad its Dockerfile,结合一个Golang Dockerfile)。

然后您拥有可重现的标准环境,您无需更改LD_LIBRARY_PATH。并且您可以导出该图像,以便您的朋友进行实验。

答案 1 :(得分:0)

可以,在main中,检查是否设置了LD_LIBRARY_PATH,如果没有,重新启动(使用:os.exec)你自己添加环境变量。

你基本上想用os.Args作为exec的参数,还要把你的环境加到LD_LIBRARY_PATH中

Bash脚本绝对是一种不那么时髦的方式。但如果你真的想让go app做到这一点,你可以。

您需要以下内容:(未经测试)

cmd := os.Command(os.Args[0],os.Args[1:]...)
cmd.Env = append(os.Environ, "LD_LIBRARY_PATH=./wherever")
cmd.StdErr = os.StdErr // repeat for StdIn/StdOut
err := cmd.Run() //blocks until sub process is complete
if err != nil {
   os.Exit(1)
}

像这样的东西