golang轻松读取环境变量并支持dotenv的插件库genv的使用
Golang轻松读取环境变量并支持dotenv的插件库genv的使用
介绍
Genv是一个用于Go语言的库,可以轻松读取和使用项目中的环境变量。它还支持从.env文件加载环境变量。
安装
go get github.com/sakirsensoy/genv
使用
1. 创建.env文件
在项目根目录下创建.env
文件并添加环境变量:
# .env
APP_HOST=localhost
APP_PORT=1234
APP_DEBUG=true
2. 配置结构体映射
建议将环境变量映射到结构体,而不是直接使用:
// config/config.go
package config
import "github.com/sakirsensoy/genv"
type appConfig struct {
Host string
Port int
Debug bool
}
var App = &appConfig{
Host: genv.Key("APP_HOST").String(),
Port: genv.Key("APP_PORT").Default(8080).Int(),
Debug: genv.Key("APP_DEBUG").Default(false).Bool(),
}
3. 主程序中使用
在main.go
中导入自动加载.env文件的包,并使用配置:
// main.go
package main
import (
_ "github.com/sakirsensoy/genv/dotenv/autoload"
"fmt"
"myproject/config"
)
func main() {
fmt.Println(config.App.Host) // 输出: localhost
fmt.Println(config.App.Port) // 输出: 1234
fmt.Println(config.App.Debug) // 输出: true
}
访问环境变量的方法
基本用法
// 1. 指定要访问的环境变量键
var env = genv.Key("MY_VARIABLE")
// 2. 设置默认值(可选)
env = env.Default("default_value")
// 3. 获取值并指定类型
var myVariable = env.String()
支持的数据类型
Genv支持以下数据类型转换:
String()
: 返回字符串类型Int()
: 返回Int32类型Float()
: 返回Float64类型Bool()
: 返回布尔类型
对于其他类型,可以使用类型转换:
var stringValue = genv.Key("KEY").String()
var byteArrayValue = []byte(stringValue)
传统方式设置环境变量
你也可以使用传统方式设置环境变量,而不使用.env文件:
APP_HOST=localhost ./myproject
贡献
欢迎贡献代码,但请注意:
- 确保API保持简单
- 没有测试的代码变更不会被接受
- 贡献流程:
- Fork项目
- 创建特性分支
- 提交变更
- 推送分支
- 创建Pull Request
许可证
© Şakir Şensoy, 2019 ~ time.Now()
基于MIT许可证发布
更多关于golang轻松读取环境变量并支持dotenv的插件库genv的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang轻松读取环境变量并支持dotenv的插件库genv的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用genv库轻松读取环境变量和dotenv文件
在Go语言中,处理环境变量和.env
文件可以使用genv
这个轻量级库,它提供了简单直观的API来管理配置。
安装genv
go get github.com/sakirsensoy/genv
基本用法
1. 读取环境变量
package main
import (
"fmt"
"github.com/sakirsensoy/genv"
)
func main() {
// 读取环境变量,如果没有则返回空字符串
dbHost := genv.Key("DB_HOST").String()
// 带默认值的读取
dbPort := genv.Key("DB_PORT").Default("5432").String()
// 必须存在的环境变量(如果不存在会panic)
dbUser := genv.Key("DB_USER").MustString()
fmt.Printf("DB Host: %s\n", dbHost)
fmt.Printf("DB Port: %s\n", dbPort)
fmt.Printf("DB User: %s\n", dbUser)
}
2. 支持dotenv(.env)文件
package main
import (
"fmt"
"github.com/sakirsensoy/genv"
)
func main() {
// 加载.env文件(默认从当前目录查找.env文件)
genv.Load()
// 也可以指定.env文件路径
// genv.Load("/path/to/.env")
// 现在可以像读取环境变量一样读取.env中的配置
apiKey := genv.Key("API_KEY").String()
debugMode := genv.Key("DEBUG").Bool()
fmt.Printf("API Key: %s\n", apiKey)
fmt.Printf("Debug Mode: %v\n", debugMode)
}
3. 类型转换支持
genv支持多种类型转换:
port := genv.Key("PORT").Default("8080").Int()
timeout := genv.Key("TIMEOUT").Default("30").Duration() // 返回time.Duration
enableSSL := genv.Key("ENABLE_SSL").Default("false").Bool()
maxConnections := genv.Key("MAX_CONNECTIONS").Default("100").Int32()
4. 高级用法
package main
import (
"fmt"
"github.com/sakirsensoy/genv"
"time"
)
type Config struct {
DBHost string
DBPort int
DBUser string
DBPassword string
Debug bool
Timeout time.Duration
}
func loadConfig() *Config {
genv.Load() // 加载.env文件
return &Config{
DBHost: genv.Key("DB_HOST").MustString(),
DBPort: genv.Key("DB_PORT").Default("5432").Int(),
DBUser: genv.Key("DB_USER").MustString(),
DBPassword: genv.Key("DB_PASSWORD").MustString(),
Debug: genv.Key("DEBUG").Default("false").Bool(),
Timeout: genv.Key("TIMEOUT").Default("30s").Duration(),
}
}
func main() {
config := loadConfig()
fmt.Printf("Database Configuration:\n")
fmt.Printf("Host: %s\n", config.DBHost)
fmt.Printf("Port: %d\n", config.DBPort)
fmt.Printf("User: %s\n", config.DBUser)
fmt.Printf("Password: %s\n", config.DBPassword)
fmt.Printf("Debug Mode: %v\n", config.Debug)
fmt.Printf("Timeout: %v\n", config.Timeout)
}
为什么选择genv?
- 简单易用:API设计直观,学习成本低
- dotenv支持:无需额外库就能读取.env文件
- 类型安全:提供多种类型转换方法
- 轻量级:不依赖其他大型库
- 灵活的默认值:可以轻松设置默认值
最佳实践
- 在项目根目录创建
.env
文件并添加到.gitignore
- 提供
.env.example
文件作为配置模板 - 对敏感配置使用
MustString()
确保应用启动时配置完整 - 为可选配置设置合理的默认值
genv是一个简单但功能完善的Go环境变量管理库,特别适合需要从环境变量和.env文件读取配置的应用场景。