gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

README.md (3997B)


      1 # gotenv
      2 
      3 [![Build Status](https://github.com/subosito/gotenv/workflows/Go%20workflow/badge.svg)](https://github.com/subosito/gotenv/actions)
      4 [![Coverage Status](https://badgen.net/codecov/c/github/subosito/gotenv)](https://codecov.io/gh/subosito/gotenv)
      5 [![Go Report Card](https://goreportcard.com/badge/github.com/subosito/gotenv)](https://goreportcard.com/report/github.com/subosito/gotenv)
      6 [![GoDoc](https://godoc.org/github.com/subosito/gotenv?status.svg)](https://godoc.org/github.com/subosito/gotenv)
      7 
      8 Load environment variables from `.env` or `io.Reader` in Go.
      9 
     10 ## Usage
     11 
     12 Put the gotenv package on your `import` statement:
     13 
     14 ```go
     15 import "github.com/subosito/gotenv"
     16 ```
     17 
     18 To modify your app environment variables, `gotenv` expose 2 main functions:
     19 
     20 - `gotenv.Load`
     21 - `gotenv.Apply`
     22 
     23 By default, `gotenv.Load` will look for a file called `.env` in the current working directory.
     24 
     25 Behind the scene, it will then load `.env` file and export the valid variables to the environment variables. Make sure you call the method as soon as possible to ensure it loads all variables, say, put it on `init()` function.
     26 
     27 Once loaded you can use `os.Getenv()` to get the value of the variable.
     28 
     29 Let's say you have `.env` file:
     30 
     31 ```sh
     32 APP_ID=1234567
     33 APP_SECRET=abcdef
     34 ```
     35 
     36 Here's the example of your app:
     37 
     38 ```go
     39 package main
     40 
     41 import (
     42 	"github.com/subosito/gotenv"
     43 	"log"
     44 	"os"
     45 )
     46 
     47 func init() {
     48 	gotenv.Load()
     49 }
     50 
     51 func main() {
     52 	log.Println(os.Getenv("APP_ID"))     // "1234567"
     53 	log.Println(os.Getenv("APP_SECRET")) // "abcdef"
     54 }
     55 ```
     56 
     57 You can also load other than `.env` file if you wish. Just supply filenames when calling `Load()`. It will load them in order and the first value set for a variable will win.:
     58 
     59 ```go
     60 gotenv.Load(".env.production", "credentials")
     61 ```
     62 
     63 While `gotenv.Load` loads entries from `.env` file, `gotenv.Apply` allows you to use any `io.Reader`:
     64 
     65 ```go
     66 gotenv.Apply(strings.NewReader("APP_ID=1234567"))
     67 
     68 log.Println(os.Getenv("APP_ID"))
     69 // Output: "1234567"
     70 ```
     71 
     72 Both `gotenv.Load` and `gotenv.Apply` **DO NOT** overrides existing environment variables. If you want to override existing ones, you can see section below.
     73 
     74 ### Environment Overrides
     75 
     76 Besides above functions, `gotenv` also provides another functions that overrides existing:
     77 
     78 - `gotenv.OverLoad`
     79 - `gotenv.OverApply`
     80 
     81 Here's the example of this overrides behavior:
     82 
     83 ```go
     84 os.Setenv("HELLO", "world")
     85 
     86 // NOTE: using Apply existing value will be reserved
     87 gotenv.Apply(strings.NewReader("HELLO=universe"))
     88 fmt.Println(os.Getenv("HELLO"))
     89 // Output: "world"
     90 
     91 // NOTE: using OverApply existing value will be overridden
     92 gotenv.OverApply(strings.NewReader("HELLO=universe"))
     93 fmt.Println(os.Getenv("HELLO"))
     94 // Output: "universe"
     95 ```
     96 
     97 ### Throw a Panic
     98 
     99 Both `gotenv.Load` and `gotenv.OverLoad` returns an error on something wrong occurred, like your env file is not exist, and so on. To make it easier to use, `gotenv` also provides `gotenv.Must` helper, to let it panic when an error returned.
    100 
    101 ```go
    102 err := gotenv.Load(".env-is-not-exist")
    103 fmt.Println("error", err)
    104 // error: open .env-is-not-exist: no such file or directory
    105 
    106 gotenv.Must(gotenv.Load, ".env-is-not-exist")
    107 // it will throw a panic
    108 // panic: open .env-is-not-exist: no such file or directory
    109 ```
    110 
    111 ### Another Scenario
    112 
    113 Just in case you want to parse environment variables from any `io.Reader`, gotenv keeps its `Parse` and `StrictParse` function as public API so you can use that.
    114 
    115 ```go
    116 // import "strings"
    117 
    118 pairs := gotenv.Parse(strings.NewReader("FOO=test\nBAR=$FOO"))
    119 // gotenv.Env{"FOO": "test", "BAR": "test"}
    120 
    121 pairs, err := gotenv.StrictParse(strings.NewReader(`FOO="bar"`))
    122 // gotenv.Env{"FOO": "bar"}
    123 ```
    124 
    125 `Parse` ignores invalid lines and returns `Env` of valid environment variables, while `StrictParse` returns an error for invalid lines.
    126 
    127 ## Notes
    128 
    129 The gotenv package is a Go port of [`dotenv`](https://github.com/bkeepers/dotenv) project with some additions made for Go. For general features, it aims to be compatible as close as possible.