116 lines
2.7 KiB
Go
116 lines
2.7 KiB
Go
package envutil
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/gookit/goutil/internal/comfunc"
|
|
"github.com/gookit/goutil/strutil"
|
|
"github.com/gookit/goutil/x/basefn"
|
|
)
|
|
|
|
// HasEnv check ENV key exists
|
|
func HasEnv(name string) bool {
|
|
_, ok := os.LookupEnv(name)
|
|
return ok
|
|
}
|
|
|
|
// Getenv get ENV value by key name, can with default value
|
|
func Getenv(name string, def ...string) string {
|
|
val := os.Getenv(name)
|
|
if val == "" && len(def) > 0 {
|
|
val = def[0]
|
|
}
|
|
return val
|
|
}
|
|
|
|
// MustGet get ENV value by key name, if not exists or empty, will panic
|
|
func MustGet(name string) string {
|
|
if val := os.Getenv(name); val != "" {
|
|
return val
|
|
}
|
|
panic("ENV key '" + name + "' not exists")
|
|
}
|
|
|
|
// GetInt get int ENV value by key name, can with default value
|
|
func GetInt(name string, def ...int) int {
|
|
if val := os.Getenv(name); val != "" {
|
|
return strutil.QuietInt(val)
|
|
}
|
|
return basefn.FirstOr(def, 0)
|
|
}
|
|
|
|
// GetBool get bool ENV value by key name, can with default value
|
|
func GetBool(name string, def ...bool) bool {
|
|
if val := os.Getenv(name); val != "" {
|
|
return strutil.QuietBool(val)
|
|
}
|
|
return basefn.FirstOr(def, false)
|
|
}
|
|
|
|
// GetOne get one not empty ENV value by input names.
|
|
func GetOne(names []string, defVal ...string) string {
|
|
for _, name := range names {
|
|
if val := os.Getenv(name); val != "" {
|
|
return val
|
|
}
|
|
}
|
|
|
|
if len(defVal) > 0 {
|
|
return defVal[0]
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// GetMulti ENV values by input names.
|
|
func GetMulti(names ...string) map[string]string {
|
|
valMap := make(map[string]string, len(names))
|
|
|
|
for _, name := range names {
|
|
if val := os.Getenv(name); val != "" {
|
|
valMap[name] = val
|
|
}
|
|
}
|
|
return valMap
|
|
}
|
|
|
|
// OnExist check ENV value by key name, will call fn on value exists(not-empty)
|
|
func OnExist(name string, fn func(val string)) bool {
|
|
if val := os.Getenv(name); val != "" {
|
|
fn(val)
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
// EnvPaths get and split $PATH to []string
|
|
func EnvPaths() []string {
|
|
return filepath.SplitList(os.Getenv("PATH"))
|
|
}
|
|
|
|
// EnvMap like os.Environ, but will returns key-value map[string]string data.
|
|
func EnvMap() map[string]string { return comfunc.Environ() }
|
|
|
|
// Environ like os.Environ, but will returns key-value map[string]string data.
|
|
func Environ() map[string]string { return comfunc.Environ() }
|
|
|
|
// SearchEnvKeys values by given keywords
|
|
func SearchEnvKeys(keywords string) map[string]string {
|
|
return SearchEnv(keywords, false)
|
|
}
|
|
|
|
// SearchEnv values by given keywords
|
|
func SearchEnv(keywords string, matchValue bool) map[string]string {
|
|
founded := make(map[string]string)
|
|
|
|
for name, val := range comfunc.Environ() {
|
|
if strutil.IContains(name, keywords) {
|
|
founded[name] = val
|
|
} else if matchValue && strutil.IContains(val, keywords) {
|
|
founded[name] = val
|
|
}
|
|
}
|
|
|
|
return founded
|
|
}
|