Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 使用.env文件在Windows中设置环境变量_Go_Environment Variables_Windows Subsystem For Linux - Fatal编程技术网

Go 使用.env文件在Windows中设置环境变量

Go 使用.env文件在Windows中设置环境变量,go,environment-variables,windows-subsystem-for-linux,Go,Environment Variables,Windows Subsystem For Linux,我正在处理一组使用.env文件进行配置的项目,其中每个.env文件都会导出许多环境变量。文件设置如下: export VARIABLE1=foo 为此,我经常使用Windows Linux子系统,但也希望能够在我的Windows机器上运行这些项目。正在讨论的项目是Golang 是否有任何简单的方法可以通过编程从这些.env文件设置Windows环境变量(最好是临时设置)?这主要是为了在VSCode中调试 使用bufio.Scanner读取环境文件行。使用字符串包分析行。使用ospackage环

我正在处理一组使用.env文件进行配置的项目,其中每个.env文件都会导出许多环境变量。文件设置如下:

export VARIABLE1=foo

为此,我经常使用Windows Linux子系统,但也希望能够在我的Windows机器上运行这些项目。正在讨论的项目是Golang

是否有任何简单的方法可以通过编程从这些.env文件设置Windows环境变量(最好是临时设置)?这主要是为了在VSCode中调试

使用
bufio.Scanner
读取环境文件行。使用
字符串
包分析行。使用
os
package环境变量函数

比如说,

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\r\nexport VARIABLE2=bar\n",
    )
    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)
    }
}

我用过哥多涅夫图书馆

将配置值添加到项目根目录下的.env文件中:

PORT=8080
NAME=FlowAPI
main.go

package main

import (
    "log"
    "github.com/joho/godotenv"
    "fmt"
    "os"
)

func init() {
    // loads values from .env into the system
    if err := godotenv.Load(); err != nil {
        log.Print("No .env file found")
    }
}

func main() {
    // Get the PORT environment variable
    port, exists := os.LookupEnv("PORT")
    if exists {
        fmt.Println(port)
    }
}
创建一个名为“.env”的文本文件(实际上,我想你可以随意调用它,但这样做会使它变得简短和描述性)。将此文件放在您选择的任何文件夹中。。。远离您可能公开的任何Python代码,例如GitHub、GitLab等。例如,我的代码位于“e:/Python/EnvironmentVariables/.env”

在您喜爱的文本编辑器中编辑文件,并创建您的秘密。如果您愿意,您可以将您所有项目的所有机密都保存在这个文件中,[标题]是可选的,并且仅为您的利益。确保所有键名称都不同-如果希望,请将项目名称添加到开头或结尾:

[MyProject]
MyUsername="Fred Bloggs"
MyEmail="fred@example.com"
MyPassword="fvghtyu7i890ol"

[MyOtherProject]
MyAPIKey_MyOtherProject="FMu4ejyK-qQLBasTs7iHx*SFN5fF"
email_port=110
DEBUG=True
现在在您的python程序中,在任何项目中都可以访问您想要的任何秘密

import os
from dotenv import load_dotenv

load_dotenv("E:/Python/EnvironmentVariables/.env")
USER_NAME = os.getenv("MyUsername")
API_KEY = os.getenv("MyAPIKey_MyOtherProject")

print(USER_NAME, API_KEY)

请澄清如何准确加载
.env
。Go不会以本机方式处理
.env
,您可能正在使用。它为当前进程设置环境变量(如果将其用作库),并且可能在windows上工作。如果您在运行go程序之前正在寻找
.env
,那么这将更加独立,与go无关。很抱歉,您忘记了这一部分。通常在linux/bash环境中,我只需
source foo.env
,它将环境变量加载到文件中。这并不一定是特定于Go的,只是我必须在Go应用程序中使用这种方法。好的,那么Godotenv上周提到了这一点,所以所有这些都适用于Linux和windows。尽管默认情况下它使用.envrc,但仍会执行此操作。我不确定这是否可以改变。是的,看起来我可能不得不走这条路,只是希望已经有一些事情在发生了。为这个提示干杯。@PizzaTheHut:看起来并不难!有关概念证明,请参阅我的修订答案。在Windows10和Ubuntu17.10上测试。问题是针对golang的特定答案。
[MyProject]
MyUsername="Fred Bloggs"
MyEmail="fred@example.com"
MyPassword="fvghtyu7i890ol"

[MyOtherProject]
MyAPIKey_MyOtherProject="FMu4ejyK-qQLBasTs7iHx*SFN5fF"
email_port=110
DEBUG=True
import os
from dotenv import load_dotenv

load_dotenv("E:/Python/EnvironmentVariables/.env")
USER_NAME = os.getenv("MyUsername")
API_KEY = os.getenv("MyAPIKey_MyOtherProject")

print(USER_NAME, API_KEY)