前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DotEnv 中 $ 的坑

DotEnv 中 $ 的坑

作者头像
kifuan
发布2022-10-24 17:08:45
3000
发布2022-10-24 17:08:45
举报
文章被收录于专栏:随便写写-kifuan随便写写-kifuan

结论

总的来说,下面的这份 .env 中的 C 会被解析为 xymn

代码语言:javascript
复制
A=xy
B=mn
C=$A$B

$ 后面跟着变量名会访问到之前定义的变量。

介绍

最近写后端,觉得还得是 Go 比某些语言吃的资源少(都说到这个份上了就不用点名了吧),我这小服务器 RAM 一共就 1G,还是要省着点用的。

项目中有一些敏感数据,例如数据库密码,直接写死在代码中肯定是下策。那么这时使用 .env 文件是一种不错的解决方案。

当然,通过其名也不难猜到它的作用主要是当作配置文件。

在 Go 中使用

自然是有现成的包供我们调用的:godotenv

安装:

代码语言:javascript
复制
go get github.com/joho/godotenv

在项目根目录下写一个 .env 文件:

代码语言:javascript
复制
PASSWORD=super_secret_password

这里我直接用自动导入了,更多的使用方式请参考文档

代码语言:javascript
复制
package main

import (
	"fmt"
	"os"

	_ "github.com/joho/godotenv/autoload"
)

func main() {
	fmt.Printf("PASSWORD: %s\n", os.Getenv("PASSWORD"))
}

目前为止是没有问题的。

$ 符造成的问题

我用的一个自动生成的复杂密码,例如 @gP$0^&N,这个是我现打出来的,不是我的任何密码,还请放心。

但当我把这个东西放到 .env 文件里的时候,原来的程序就报错了,说是密码错误,打印出来一看是:

代码语言:javascript
复制
PASSWORD: @gP^&N

它直接把我的 $0 吃掉了,把我坑死了。因为原来的那个密码更长,乍一看看不出来其实是有区别的。

即使你加上双引号,即 "@gP

解决方案

还得是反斜杠。把密码改成@gP\$0^&N,输出就正常了。

但是我实际的解决方案更简单粗暴:把 $ 从密码里删掉,一劳永逸。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 结论
  • 介绍
  • 在 Go 中使用
  • $ 符造成的问题
  • 解决方案
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档