惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
AWS News Blog
AWS News Blog
Google DeepMind News
Google DeepMind News
U
Unit 42
博客园 - 叶小钗
博客园 - 聂微东
GbyAI
GbyAI
Stack Overflow Blog
Stack Overflow Blog
有赞技术团队
有赞技术团队
aimingoo的专栏
aimingoo的专栏
D
DataBreaches.Net
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Jina AI
Jina AI
美团技术团队
The Cloudflare Blog
M
MIT News - Artificial intelligence
Microsoft Azure Blog
Microsoft Azure Blog
I
InfoQ
S
Schneier on Security
C
Check Point Blog
Project Zero
Project Zero
The Hacker News
The Hacker News
Scott Helme
Scott Helme
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Cisco Talos Blog
Cisco Talos Blog
P
Privacy International News Feed
SecWiki News
SecWiki News
Latest news
Latest news
MongoDB | Blog
MongoDB | Blog
S
Secure Thoughts
Google Online Security Blog
Google Online Security Blog
F
Fortinet All Blogs
博客园 - 三生石上(FineUI控件)
H
Help Net Security
TaoSecurity Blog
TaoSecurity Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Last Week in AI
Last Week in AI
P
Privacy & Cybersecurity Law Blog
Forbes - Security
Forbes - Security
G
GRAHAM CLULEY
N
Netflix TechBlog - Medium
L
Lohrmann on Cybersecurity
A
About on SuperTechFans
T
The Exploit Database - CXSecurity.com
C
Cisco Blogs
PCI Perspectives
PCI Perspectives
大猫的无限游戏
大猫的无限游戏
T
Troy Hunt's Blog
H
Hacker News: Front Page
Vercel News
Vercel News

鸟窝

鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 LLM 究竟是如何工作的? Go 实验特性详解 amd64 微架构级别对 Go 程序性能提升多少? Loop Engineering 实践:一次批量实现 8 个 issue,完成夔牛工具的开发 Loop Engineering 实践:我把 RDMA 开发库移植到 Go 语言,花费 239 块钱 傻瓜式RDMA高性能网络开发:从零跑到 400 Gb每秒 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 百度网络监控工具开源第三弹:lidar — 不只是 pingmesh 别只盯着gopacket了,看看这个强大的网络库 大厂的内部工具居然开源了! 一窥百度物理网络秒级监控定位的秘密 如何构建你自己的 Agent 运行时 寻找你代码中的臭味:一个让 AI 帮你嗅出架构腐化的开源 Skill 套壳不丢人!我用Go+AI搓了一个Agent统一编排框架,ClaudeCode-Codex-Pi全被我包了 告别死锁和陈旧语法、告别性能瓶颈:三个开源 Skill,新手Gopher 秒变 Go 语言大神 SPEC和PRD的区别 SPEC和方案设计有什么区别 从需求到上线,让 AI 管理你的整个研发流程! antigravity-cli 使用 CLIProxyAPI, 让最新的 Codex 能够支持国内的各大模型 Clawpatch + codex-review:AI 代码审查工具链的正确打开方式 拆解Manus:沙盒架构深度解析 40+ Claude Code Tips: From Basics to Advanced Ralph 实验:构建 SQLite UI 了解 Manus Sandbox - 您的云计算机 Notex:一个开源 NotebookLM 替代方案的实现 拆解Manus:真正有用的深度报告的生成 Claude Code 使用 我给每个模型服务商『捐』了10块钱,只为了... Go之禅 - 基于Rob Pike思想的Go语言哲学 Codex CLI vs Gemini CLI vs Claude Code:谁是最佳选择? goskills:Claude Skills 功能强大,为我所用 一行代码使用 Claude Skill 和 deepseek langchain + MCP:如虎添翼 Linux 中网络包的一生 Codex CLI vs Gemini CLI vs Claude Code: Which is the Best? 使用Linux 30年了,我都不知道 ping 8.8 还能这么用? 从 AI 哪里挣钱? Go sync 包近两年发展综述 deepseek-v3.2-exp的闪电索引器
godotenv 库介绍
by smallnest · 2025-11-01 · via 鸟窝

godotenv 是一个 Go 语言库,用于从 .env 文件加载环境变量到应用程序中 1 。它是 Ruby dotenv 项目的 Go 移植版本 1 。

背景

该库遵循十二要素应用方法论,将配置与代码分离。核心理念是:任何可能在部署环境之间变化的内容(如数据库资源句柄或外部服务凭证)都应该从代码中提取到环境变量中。

但在开发机器或运行多个项目的持续集成服务器上设置环境变量并不总是实用的。godotenv 在环境启动时从 .env 文件加载变量到 ENV 中。

安装方法

作为库使用

1

go get github.com/joho/godotenv

作为命令行工具

Go >= 1.17:

1

go install github.com/joho/godotenv/cmd/godotenv@latest

使用方法

基本用法

  1. 在项目根目录创建 .env 文件:

1

2

S3_BUCKET=YOURS3BUCKET

SECRET_KEY=YOURSECRETKEYGOESHERE

  1. 在 Go 代码中加载:

1

2

3

4

5

err := godotenv.Load()

if err != nil {

log.Fatal("Error loading .env file")

}

s3Bucket := os.Getenv("S3_BUCKET")

自动加载

使用 autoload 包可以在导入时自动读取 .env:

1

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

加载多个文件

可以指定多个 .env 文件:

1

2

godotenv.Load("somerandomfile")

godotenv.Load("filenumberone.env", "filenumbertwo.env")

核心函数

  • Load(): 加载变量到系统环境,不覆盖已存在的变量
  • Overload(): 加载变量到系统环境,会覆盖已存在的变量
  • Read(): 读取变量到 map 而不是环境变量,会合并多个文件的内容到一个 map 中,后加载的文件会覆盖前面文件中的同名键。
  • Parse(): 从 io.Reader 解析
  • Unmarshal(): 从字符串解析
  • Write(): 将 map 写入文件
  • Marshal(): 将 map 转换为字符串

命令行模式

1

godotenv -f /some/path/to/.env some_command with some args

使用 -o 标志可以覆盖现有环境变量 。

支持的 .env 文件格式

支持注释和 export 语句:

1

2

3

4

# 注释

SOME_VAR=someval

FOO=BAR # 行尾注释

export BAR=BAZ

也支持 YAML 风格:

1

2

FOO: bar

BAR: baz

重要注意事项

优先级规则

已存在的环境变量优先于后加载的变量。这意味着:

  • Load() 不会覆盖已存在的环境变量
  • Overload() 会覆盖已存在的环境变量

多环境管理

推荐的多环境管理方式(开发、测试、生产):

1

2

3

4

5

6

7

8

9

10

11

env := os.Getenv("FOO_ENV")

if "" == env {

env = "development"

}

godotenv.Load(".env." + env + ".local")

if "test" != env {

godotenv.Load(".env.local")

}

godotenv.Load(".env." + env)

godotenv.Load() // 原始 .env

功能完整性声明

该库已被声明为功能完整 。不再接受添加新功能或破坏库 API 的 issue 或 pull request。

平台支持

Linux 和 Windows 环境都有测试覆盖和 CI,但不保证命令行版本在 Windows 上正常工作。

Notes

该库的实现核心在 godotenv.goparser.go 文件中,其中 parseBytes() 函数负责实际的解析工作 。库支持变量替换(如 ${VAR}$VAR)和特殊字符转义。所有代码更改都需要测试和对等 dotenv 实现的参考。