开源项目 gobuffalo/envy
使用教程
1. 项目的目录结构及介绍
gobuffalo/envy
是一个用于环境变量管理的 Go 库。以下是该项目的目录结构及其介绍:
gobuffalo/envy/
├── .github/
│ └── workflows/
│ └── ci.yml
├── envy.go
├── envy_test.go
├── go.mod
├── go.sum
├── LICENSE
├── Makefile
├── README.md
└── vendor/
.github/workflows/ci.yml
: GitHub Actions 的 CI 配置文件。envy.go
: 主库文件,包含环境变量管理的核心功能。envy_test.go
: 测试文件,包含对envy.go
中功能的单元测试。go.mod
和go.sum
: Go 模块文件,用于管理项目的依赖。LICENSE
: 项目的许可证文件。Makefile
: 包含一些常用的命令,如测试、构建等。README.md
: 项目说明文档。vendor/
: 依赖库的本地副本。
2. 项目的启动文件介绍
envy.go
是 gobuffalo/envy
项目的主文件,负责环境变量的加载和管理。以下是该文件的主要功能介绍:
package envy
import (
"os"
"strconv"
"strings"
)
// Get returns the value of the environment variable named by the key.
func Get(key string, fallback ...string) string {
if v, ok := os.LookupEnv(key); ok {
return v
}
if len(fallback) > 0 {
return fallback[0]
}
return ""
}
// MustGet returns the value of the environment variable named by the key.
// It panics if the value is not set.
func MustGet(key string) string {
v, ok := os.LookupEnv(key)
if !ok {
panic("environment variable " + key + " is not set")
}
return v
}
// Set sets the value of the environment variable named by the key.
func Set(key, value string) error {
return os.Setenv(key, value)
}
// Temp sets the value of the environment variable named by the key for the duration of the callback.
func Temp(key, value string, cb func()) {
original := Get(key)
Set(key, value)
defer Set(key, original)
cb()
}
Get
: 获取指定环境变量的值,如果未设置则返回默认值。MustGet
: 获取指定环境变量的值,如果未设置则抛出异常。Set
: 设置指定环境变量的值。Temp
: 临时设置环境变量的值,并在回调函数执行后恢复原值。
3. 项目的配置文件介绍
gobuffalo/envy
项目本身不包含传统的配置文件,因为它主要通过环境变量进行配置。然而,你可以通过设置环境变量来配置你的应用程序。以下是一个示例:
# 设置环境变量
export MY_APP_DB_USER=admin
export MY_APP_DB_PASSWORD=secret
在你的 Go 代码中,你可以使用 envy
包来获取这些环境变量的值:
package main
import (
"fmt"
"github.com/gobuffalo/envy"
)
func main() {
dbUser := envy.Get("MY_APP_DB_USER", "defaultUser")
dbPassword := envy.Get("MY_APP_DB_PASSWORD", "defaultPassword")
fmt.Printf("Database User: %s\n", dbUser)
fmt.Printf("Database Password: %s\n", dbPassword)
}
通过这种方式,你可以灵活地配置你的应用程序,而无需修改代码。