DotEnv 中 $ 的坑
结论
总的来说,下面的这份 .env
中的 C
会被解析为 xymn
:
1 | A=xy |
用 $
后面跟着变量名会访问到之前定义的变量。
介绍
最近写后端,觉得还得是 Go
比某些语言吃的资源少(都说到这个份上了就不用点名了吧),我这小服务器 RAM
一共就 1G,还是要省着点用的。
项目中有一些敏感数据,例如数据库密码,直接写死在代码中肯定是下策。那么这时使用 .env
文件是一种不错的解决方案。
当然,通过其名也不难猜到它的作用主要是当作配置文件。
在 Go 中使用
自然是有现成的包供我们调用的:godotenv
安装:
1 | go get github.com/joho/godotenv |
在项目根目录下写一个 .env
文件:
1 | PASSWORD=super_secret_password |
这里我直接用自动导入了,更多的使用方式请参考文档:
1 | package main |
目前为止是没有问题的。
$ 符造成的问题
我用的一个自动生成的复杂密码,例如 @gP$0^&N
,这个是我现打出来的,不是我的任何密码,还请放心。
但当我把这个东西放到 .env
文件里的时候,原来的程序就报错了,说是密码错误,打印出来一看是:
1 | PASSWORD: @gP^&N |
它直接把我的 $0
吃掉了,把我坑死了。因为原来的那个密码更长,乍一看看不出来其实是有区别的。
即使你加上双引号,即 "@gP$0^&N"
,最终的结果还会把 $0
吃掉。
解决方案
还得是反斜杠。把密码改成@gP\$0^&N
,输出就正常了。
但是我实际的解决方案更简单粗暴:把 $
从密码里删掉,一劳永逸。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 喵喵小窝!