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

贡献

欢迎贡献代码,但请注意:

  1. 确保API保持简单
  2. 没有测试的代码变更不会被接受
  3. 贡献流程:
    • 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?

  1. 简单易用:API设计直观,学习成本低
  2. dotenv支持:无需额外库就能读取.env文件
  3. 类型安全:提供多种类型转换方法
  4. 轻量级:不依赖其他大型库
  5. 灵活的默认值:可以轻松设置默认值

最佳实践

  1. 在项目根目录创建.env文件并添加到.gitignore
  2. 提供.env.example文件作为配置模板
  3. 对敏感配置使用MustString()确保应用启动时配置完整
  4. 为可选配置设置合理的默认值

genv是一个简单但功能完善的Go环境变量管理库,特别适合需要从环境变量和.env文件读取配置的应用场景。

回到顶部