6 Star 18 Fork 4

GiteeStudio/gitee

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
env.go 1.65 KB
一键复制 编辑 原始数据 按行查看 历史
江二十三 提交于 2019-12-18 14:28 . Add EraseEnv
package gitee
import (
"errors"
"os"
"strconv"
"strings"
"sync"
)
// Derivator expand env engine
type Derivator struct {
envBlock map[string]string
mu sync.RWMutex
}
// NewDerivator create env derivative
func NewDerivator() *Derivator {
de := &Derivator{
envBlock: make(map[string]string),
}
appdir := AppDir()
if appdir != "." {
de.envBlock["APPDIR"] = appdir
}
return de
}
// AddBashCompatible $0~$9
func (de *Derivator) AddBashCompatible() {
de.mu.Lock()
defer de.mu.Unlock()
for i := 0; i < len(os.Args); i++ {
de.envBlock[strconv.Itoa(i)] = os.Args[i]
}
de.envBlock["$"] = strconv.Itoa(os.Getpid())
}
// Append append to env
func (de *Derivator) Append(k, v string) error {
if k == "" || v == "" {
return errors.New("empty env k/v input")
}
de.mu.Lock()
defer de.mu.Unlock()
de.envBlock[k] = v
return nil
}
// Environ create new environ block
func (de *Derivator) Environ() []string {
de.mu.RLock()
defer de.mu.RUnlock()
oe := os.Environ()
ev := make([]string, 0, len(oe)+len(de.envBlock))
for _, e := range oe {
kv := strings.Split(e, "=")
if len(kv) > 0 {
k := kv[0]
if _, ok := de.envBlock[k]; ok {
continue
}
}
ev = append(ev, e)
}
for k, v := range de.envBlock {
ev = append(ev, StrCat(k, "=", v))
}
return ev
}
// EraseEnv k
func (de *Derivator) EraseEnv(k string) {
de.mu.Lock()
defer de.mu.Unlock()
delete(de.envBlock, k)
}
// GetEnv env
func (de *Derivator) GetEnv(k string) string {
de.mu.RLock()
defer de.mu.RUnlock()
if v, ok := de.envBlock[k]; ok {
return v
}
return os.Getenv(k)
}
// ExpandEnv env
func (de *Derivator) ExpandEnv(s string) string {
return os.Expand(s, de.GetEnv)
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/oscstudio/gitee.git
git@gitee.com:oscstudio/gitee.git
oscstudio
gitee
gitee
master

搜索帮助

D67c1975 1850385 1daf7b77 1850385