Package os
import "os"
func Clearenv()
func Environ() []string
func Expand(s string, mapping func(string) string) string
func ExpandEnv(s string) string
func Getenv(key string) string
func Setenv(key, value string) error
func Unsetenv(key string) error
Read the env file lines using bufio.Scanner
. Parse the lines using the strings
package. Use the os
package environment variable functions.
For example,
package main
import (
"bufio"
"bytes"
"fmt"
"io"
"os"
"strings"
)
func parseLine(line string) (key, value string) {
line = strings.TrimSpace(line)
const export = `export `
if !strings.HasPrefix(line, export) {
return "", ""
}
line = strings.TrimPrefix(line, export)
fields := strings.SplitN(line, "=", 2)
if len(fields) > 0 {
key = strings.TrimSpace(fields[0])
if len(fields) > 1 {
value = strings.TrimSpace(fields[1])
}
}
return key, value
}
func setenv(r io.Reader) error {
s := bufio.NewScanner(r)
for s.Scan() {
line := s.Text()
key, value := parseLine(line)
if len(key) < 1 {
continue
}
err := os.Setenv(key, value)
if err != nil {
return err
}
}
if err := s.Err(); err != nil {
return err
}
return nil
}
func main() {
envFile := bytes.NewBufferString(
"export VARIABLE1=foo
export VARIABLE2=bar
",
)
err := setenv(envFile)
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
for _, key := range []string{`VARIABLE1`, `VARIABLE2`} {
env, found := os.LookupEnv(key)
fmt.Println(key, found, env)
}
}
Playground: https://play.golang.org/p/pZKQ0GW5eCu
Output:
VARIABLE1 true foo
VARIABLE2 true bar