为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
MYYA 2023-02-28 20:20:55
我有一种方法来检查所需的环境变量是否存在,如果存在则设置它,否则填充错误消息。我正在这样做:package mainimport (    "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
查看完整描述

1 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

如果不使用指针,您将无法做您想做的事情。该变量globalEnvVar与全局变量无关。它是位于内存中不同地址的不同对象,它们的内容可能相同但更新一个对象不会更新另一个对象。

将映射更改为map[string]*string并使用指向要更新的变量的指针。并且在进行更新时使用指针间接寻址,例如*globalEnvVar = res


查看完整回答
反对 回复 2023-02-28
  • 1 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信