如何在 Golang 中创建以全局变量为值的地图?

我有一种方法来检查所需的环境变量是否存在,如果存在则设置它,否则填充错误消息。我正在这样做:


package main


import (

    "errors"

    "fmt"

    "os"

    "strings"

)


var (

    AxGitDownloadUrl string

)


const ENV_ERR_MSG_START = "set the following environment variables ->"

const AX_GIT_DOWNLOAD_URL = "AX_GIT_DOWNLOAD_URL"


func main() {

    if err := verifyMandatoryEnvVarsAndSet(); err != nil {

        fmt.Printf(err.Error())

    }

}

func verifyMandatoryEnvVarsAndSet() error {

    errMsg := ENV_ERR_MSG_START

    m := map[string]string{AX_GIT_DOWNLOAD_URL: AxGitDownloadUrl}


    for k, v := range m {

        errMsg = setConfig(k, v, errMsg)

    }

    if len(errMsg) > len(ENV_ERR_MSG_START) {

        errMsg = strings.TrimSuffix(errMsg, ",")

        return errors.New(errMsg)

    }

    return nil

}


func setConfig(envVarName, globalEnvVar, errMsg string) string {

    fmt.Printf("envVarName -> %s,globalEnvVar->%s ", envVarName, globalEnvVar)

    res, ok := os.LookupEnv(envVarName)

    if ok {

        globalEnvVar = res

    } else {

        errMsg = errMsg + envVarName + ","

    }

    return errMsg

}

我面临的问题是,在地图的值部分,它没有设置全局变量,而是在那里我看到了一片空白。


那么如何使用该方法设置全局变量值呢setConfig?


游乐场链接:https://go.dev/play/p/DC5oPmsjEIQ


MYYA
浏览 139回答 1
1回答

慕田峪4524236

如果不使用指针,您将无法做您想做的事情。该变量globalEnvVar与全局变量无关。它是位于内存中不同地址的不同对象,它们的内容可能相同但更新一个对象不会更新另一个对象。将映射更改为map[string]*string并使用指向要更新的变量的指针。并且在进行更新时使用指针间接寻址,例如*globalEnvVar = res。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go