gopkg.in/essentialkaos/ek.v7@v7.4.0/env/env.go (about)

     1  // +build !windows
     2  
     3  // Package env provides methods for working with environment variables
     4  package env
     5  
     6  // ////////////////////////////////////////////////////////////////////////////////// //
     7  //                                                                                    //
     8  //                     Copyright (c) 2009-2017 ESSENTIAL KAOS                         //
     9  //        Essential Kaos Open Source License <https://essentialkaos.com/ekol>         //
    10  //                                                                                    //
    11  // ////////////////////////////////////////////////////////////////////////////////// //
    12  
    13  import (
    14  	"os"
    15  	"strconv"
    16  	"strings"
    17  	"syscall"
    18  )
    19  
    20  // ////////////////////////////////////////////////////////////////////////////////// //
    21  
    22  // Env is map with environment values
    23  type Env map[string]string
    24  
    25  // ////////////////////////////////////////////////////////////////////////////////// //
    26  
    27  // Get return key-value map with environment values
    28  func Get() Env {
    29  	env := make(Env)
    30  
    31  	for _, ev := range os.Environ() {
    32  		evs := strings.Split(ev, "=")
    33  		k, v := evs[0], evs[1]
    34  
    35  		env[k] = v
    36  	}
    37  
    38  	return env
    39  }
    40  
    41  // Which find full path to some app
    42  func Which(name string) string {
    43  	paths := Get().Path()
    44  
    45  	for _, path := range paths {
    46  		if syscall.Access(path+"/"+name, syscall.F_OK) == nil {
    47  			return path + "/" + name
    48  		}
    49  	}
    50  
    51  	return ""
    52  }
    53  
    54  // ////////////////////////////////////////////////////////////////////////////////// //
    55  
    56  // Path return path as string slice
    57  func (e Env) Path() []string {
    58  	return strings.Split(e["PATH"], ":")
    59  }
    60  
    61  // GetS return environment variable value as string
    62  func (e Env) GetS(name string) string {
    63  	return e[name]
    64  }
    65  
    66  // GetI return environment variable value as int
    67  func (e Env) GetI(name string) int {
    68  	value, err := strconv.Atoi(e[name])
    69  
    70  	if err != nil {
    71  		return -1
    72  	}
    73  
    74  	return value
    75  }
    76  
    77  // GetF return environment variable value as float
    78  func (e Env) GetF(name string) float64 {
    79  	value, err := strconv.ParseFloat(e[name], 64)
    80  
    81  	if err != nil {
    82  		return -1.0
    83  	}
    84  
    85  	return value
    86  }