最近开发的时候有一个不易察觉到的问题, 有关 .env

.env 是一个基于全局的环境变量做的配置文件, 比较常见的像laravel 或者 goravel 这类的框架在当配置文件使用

这一次因为数据库的密码中有$的符号, 没想到读取.env文件时把它当做变量来解析了, 例如:

1
TMP_XXX=1234$56abc$PATH

结果解析出来的时候

1
2
3
4
5
config := facades.Config()
tmp := config.Env("TMP_XXX", "")
fmt.Printf("tmp:%v \n", tmp)

// 输出 tmp:1234abc/opt/homebrew/bin:/opt/homebr....

本应解析的值为1234$56abc$PATH, 结果却是默认把其中的$当做变量来解析了, 而且也能使用环境变量

规避的方法也比较简单, 使用反斜杠\去给他屏蔽掉, 如下:

1
TMP_XXX=1234\$56abc\$PATH

这样就能达到预期的解析