关于环境变量配置的思考总结
其实写这一篇时还是非常不好意思的,毕竟无论是学习还是开发这么久,第一步就是配置 SDK,编辑环境变量。但是这一步我为了避免一些未知的错误,避免踩坑,通常采用的方式是网上找对应的有效图文教程,跟着一步步完成。整个过程中还是少了一点思考,因此印象不深。今天,借着搭建 go 的开发环境,对整个配置过程进行了梳理,有了一些思考与总结。
名词理解
首先,在开始之前,我们先要理解以下概念:
SDK
SDK:全称(Software Development Kit 软件开发工具包),一般都是软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。
因此针对不同的操作系统往往有不同的 SDK,以 go 官网给出的 SDK 为例:
darwin
:mac 下的 SDK。其中pkg
是图形化安装包,而tar.gz
是解压就可以使用。linux
:linux 下的 SDK。386 是 32 位系统,amd64 是 64 位系统。windows
:win 下的 SDK,其中msi
是图形化安装包,而zip
是解压就可以使用。freebsd
:unix 下的 SDK。
可以把 SDK 理解为由第三方服务商提供的实现软件产品某项功能的工具包,里面一般以集合 api 和文档、范例、工具的形式出现,也就是由很多类型文件的集合。这里以直接从官网下载的 go 的 SDK(zip 解压后)为例:
可以发现,里面有很多文件,例如 api,可执行的二进制 bin 文件(例如 go.exe 用来编译和运行 go 源码,gofmt.exe),doc 文档,lib 相关的库文件,test 测试用的文件,以及 src 源码等等。
环境变量
用户环境变量
用户环境变量,是独属于某个用户的,只有配置这个环境变量的用户才能使用它。一旦切换用户就无法使用该环境变量。
系统环境变量
系统环境变量是整个系统的。配置了系统环境变量后,使用该操作系统的任何用户都能通过这个环境变量直接在命令窗口直接找到相应程序。
可以通过系统变量中的内容可知,该系统变量有很多,并且每一项都有其对应的值,每个变量名都有其独特的含义与作用。
PATH:指定可执行文件的搜索路径。一般配置环境常在 PATH 变量放入配置程序路径。一般可执行文件都在二进制 bin 目录中。因此我们通常会把软件目录下的 bin 路径添加到 PATH 中。
定义 PATH 环境变量的好处是:即使不在该可执行文件的目录下,仍然可以通过命令行调用该可执行文件。
这里需要额外注意的一点是,通常系统在环境变量中寻找程序路径时,是由前往后(或者说是从上往下)寻找,找到第一个后会直接使用,并且不再往下寻找。因此存在多个路径时,要把想要使用的路径移动到 PATH 中靠前的位置。例如同时装了 mysql8.0 和 5.7 两个版本,这两个版本查版本号的命令都是mysql -V
,对于mysql
这个命令系统会在 PATH 中寻找它的路径,如果 8.0 的 path 在 5.7 的上面,则会执行 8.0 的程序,而不会执行 5.7 的程序。因此 5.7 的 path 就相当于失效的,所以没有必要添加同一程序的两个 path。
此外,系统环境变量中,还可以采用% %
来调用系统中的其他环境变量。例如在配置 go 的环境时,先定义了 go 的 SDK 的根目录 D:\go
其变量名为GOROOT
,作为 go 的执行目录,那么在配置它的 PATH 时,可以将它的值设置为 %GOROOT%\bin
,起到变量替换的作用。未来如果 SDK 根目录改变的话,也只需要修改GOROOT
变量值即可,而不需要动 PATH 中的变量值。类比 java,java 中也把JAVA_HOME
作为 java 的执行目录。
最后,一点点感触,通常我们可能都习惯于.msi 自动安装配置好一切,而忽略了对于一些基础设置的思考,因此常常会有“最复杂的一步是配置环境”这种说法,其实用心去思考总结,这种说法也就不攻自破了。
欢迎关注个人公众号【AIShareLab】,一起交流更多前沿算法,Paper 解读,项目源码,面经总结。
版权声明: 本文为 InfoQ 作者【timerring】的原创文章。
原文链接:【http://xie.infoq.cn/article/2d47e5fa7b05dab952ff4b708】。未经作者许可,禁止转载。
评论