Go 语言获取程序各类资源的绝对路径的方法
路径问题
开发程序时,如果写死各类资源文件的路径,那么如果部署环境中的路径和开发环境不同,程序就无法正确工作。
为了解决这个问题,需要动态获取程序中各类资源的绝对路径。这样,不论程序被部署在什么地方,都可以正确读取各类资源文件。
各种编程语言,都有一些技巧可以获取程序各类资源的绝对路径的方法。本文要介绍的,是Go语言的相关技巧。
设计思路
我们可以通过在程序运行时,计算出程序的绝对路径,从而得到程序所在目录的绝对路径,进而获取程序各类资源的绝对路径。
我八年前写过一篇文章《Python怎样得到资源文件的绝对路径》,就是在Python中利用这个思路,实现了动态获得资源文件的绝对路径。
Go语言获取程序各类资源的绝对路径的方法
在Go语言的init()或者main() 函数中,调用下面这个Go语言函数,就能获取程序根目录的绝对路径。
注意: 这里我假设Go语言的程序放在程序根目录下的bin目录下。因此需要通过获取两层目录来获得程序根目录的绝对路径。
Go语言比较奇特的一点是,main函数是没有参数的。在任何代码中都可以通过os.Args获取程序的参数。因此,利用这一点,我们不需要在main函数中获取程序根目录的绝对路径,而是可以在init函数中,在更早的时机就可以获得程序根目录的绝对路径。
然后,我们就可以通过下面的方法可以获取各类资源的绝对路径。
上面的代码在跨平台上有点问题。在类Unix系统上是正确的,在Windows上,路径会有问题。因为Windows的路径符号是\而不是/。
更好的代码应该如下所示。
这样,我们就可以编写出不依赖写死的绝对路径的Go语言程序了。再不用因为开发、测试和部署环境的Go语言程序放置位置不同不能正常运行而烦恼了。我们编写出的Go语言程序可以简单发布为绿色软件:直接把Go语言程序压缩后,随便客户解压在什么位置下都可以正确运行。
版权声明: 本文为 InfoQ 作者【良少】的原创文章。
原文链接:【http://xie.infoq.cn/article/38b98a02fd83421b4437445fd】。
本文遵守【CC BY-ND】协议,转载请保留原文出处及本版权声明。
评论