今天就来唠唠我捣鼓 `*` 这玩意儿的经历。
起因是这样的,前段时间我在做一个小程序,需要根据跑程序的那台电脑是啥环境,来决定一些配置咋弄。比如,在我自己电脑上调试的时候,数据库地址是这个,丢到服务器上跑,那地址就得是另一个。总不能每次手动去改代码?那也太蠢了。
一开始我琢磨着,是不是得搞个配置文件啥的。后来转念一想,操作系统本身不就有环境变量这东西嘛现成的,干嘛不用。于是我就开始找怎么在我的代码里头拿到这些系统级的环境变量。
捣鼓了一阵子,就发现了 `*` 这个类。看着名字就挺像那么回事儿的,"系统环境"嘛
摸索过程
我先是试探性地想拿个最常见的环境变量,比如那个 `PATH`。我就照着文档(就是网上随便搜的例子)写了句类似 `*("PATH")` 的代码。
跑了一下,还真行!控制台哗打出来一大串路径,跟我自己在系统设置里看到的一模一样。当时就觉得,这玩意儿靠谱。
接着我就想,能不能拿到我自己定义的环境变量?我就在系统里手动加了个测试的环境变量,名叫 `MY_APP_MODE`,值设成了 `Development`。然后回到代码里,用同样的方法 `*("MY_APP_MODE")` 去拿。
结果成了! 这下我就更有底了。这样我就可以在服务器上设一个 `MY_APP_MODE` 的环境变量,值是 `Production`,程序启动的时候一读,就知道自己在哪儿跑,该用哪套配置了。
不只是环境变量
后来我又顺带着多瞅了几眼 `*` 还能干发现它不光能拿环境变量,还能干挺多别的事儿:
- :能拿到电脑的名字。有时候打日志或者做区分的时候挺有用。
- :能知道操作系统是啥版本。虽然不常用,但特定场景下可能需要判断一下。
- :获取当前程序运行的目录。这个也挺常用的,找相对路径的文件啥的就方便多了。
- :还能看CPU有几个核。做一些并行处理的时候可能会参考这个值。
- :这个挺有意思,它会给你当前操作系统对应的换行符,比如 Windows 是 `\r\n`,Linux 是 `\n`。写跨平台的文本文件时能避免换行符错乱的问题。
还有挺多别的属性和方法,我就没一个个试了,感觉上面这几个是我比较可能用到的。
最终实现
回到我最初的需求,判断环境来加载不同配置。我最终就是通过 `*("MY_APP_MODE")` 来获取环境变量。在代码里加了个判断:
如果拿到的是 `Production`,就加载生产环境的数据库地址、API密钥啥的。
如果拿到的是 `Development` 或者没拿到(默认当作开发环境),就加载我本地调试用的那套配置。
这样一来,同一份代码,只需要在不同环境设置好对应的环境变量,就能跑起来了,不用改代码再重新编译发布,确实省事儿多了。
总的来说,这回折腾 `*` 的过程还算顺利。它提供了一种挺直接的方式让程序能感知到自己跑在什么样的系统环境里,读取环境变量、获取系统信息啥的都挺方便。虽然平时可能不怎么显眼,但真到需要的时候,还是挺管用的一个工具。