joho/godotenv

GitHub: joho/godotenv

Stars: 10456 | Forks: 451

# GoDotEnv ![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/8f67c7bc59110830.svg) [![Go Report Card](https://goreportcard.com/badge/github.com/joho/godotenv)](https://goreportcard.com/report/github.com/joho/godotenv) From the original Library: It can be used as a library (for loading in env for your own daemons etc.) or as a bin command. There is test coverage and CI for both linuxish and Windows environments, but I make no guarantees about the bin version working on Windows. ## Installation As a library go get github.com/joho/godotenv as a tool dependency: go >= 1.24 go get -tool github.com/joho/godotenv/cmd/godotenv or if you want to use it as a bin command go install github.com/joho/godotenv/cmd/godotenv@latest ## Usage Add your application configuration to your `.env` file in the root of your project: S3_BUCKET=YOURS3BUCKET SECRET_KEY=YOURSECRETKEYGOESHERE Then in your Go app you can do something like package main import ( "log" "os" "github.com/joho/godotenv" ) func main() { err := godotenv.Load() if err != nil { log.Fatal("Error loading .env file") } s3Bucket := os.Getenv("S3_BUCKET") secretKey := os.Getenv("SECRET_KEY") // now do something with s3 or whatever } If you're even lazier than that, you can just take advantage of the autoload package which will read in `.env` on import import _ "github.com/joho/godotenv/autoload" While `.env` in the project root is the default, you don't have to be constrained, both examples below are 100% legit godotenv.Load("somerandomfile") godotenv.Load("filenumberone.env", "filenumbertwo.env") If you want to be really fancy with your env file you can do comments and exports (below is a valid env file) # I am a comment and that is OK SOME_VAR=someval FOO=BAR # comments at line end are OK too export BAR=BAZ Or finally you can do YAML(ish) style FOO: bar BAR: baz as a final aside, if you don't want godotenv munging your env you can just get a map back instead var myEnv map[string]string myEnv, err = godotenv.Read() s3Bucket := myEnv["S3_BUCKET"] ... or from an `io.Reader` instead of a local file reader := getRemoteFile() myEnv, err := godotenv.Parse(reader) ... or from a `string` if you so desire content := getRemoteFileContent() myEnv, err := godotenv.Unmarshal(content) ### Variable name compatibility Ruby's dotenv only allows `[A-Za-z0-9_.]` in key names, while Node's dotenv also permits `-`. godotenv has matched the Node charset since v1.4.0, so keys like `MY-VAR` parse cleanly here and in Node but will error under Ruby's dotenv. ### Precedence & Conventions Existing envs take precedence of envs that are loaded later. The [convention](https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use) for managing multiple environments (i.e. development, test, production) is to create an env named `{YOURAPP}_ENV` and load envs in this order: env := os.Getenv("FOO_ENV") if "" == env { env = "development" } godotenv.Load() // The Original .env godotenv.Load(".env." + env) if "test" != env { godotenv.Load(".env.local") } godotenv.Load(".env." + env + ".local") If you need to, you can also use `godotenv.Overload()` to defy this convention and overwrite existing envs instead of only supplanting them. Use with caution. ### Command Mode Assuming you've installed the command as above and you've got `$GOPATH/bin` in your `$PATH` godotenv -f /some/path/to/.env some_command with some args If you don't specify `-f` it will fall back on the default of loading `.env` in `PWD` By default, it won't override existing environment variables; you can do that with the `-o` flag. ### Writing Env Files Godotenv can also write a map representing the environment to a correctly-formatted and escaped file env, err := godotenv.Unmarshal("KEY=value") err := godotenv.Write(env, "./.env") ... or to a string env, err := godotenv.Unmarshal("KEY=value") content, err := godotenv.Marshal(env) ## Releases Use [annotated tags for all releases](https://github.com/joho/godotenv/issues/30). Example `git tag -a v1.2.1` ## Who? The original library [dotenv](https://github.com/bkeepers/dotenv) was written by [Brandon Keepers](http://opensoul.org/), and this port was done by [John Barton](https://johnbarton.co/) based off the tests/fixtures in the original library.
标签:EVTX分析