Map 创建全局映射变量

Map 创建全局映射变量,map,global-variables,go,Map,Global Variables,Go,我需要一些关于在Go中创建全局映射变量的帮助。我所做的工作如下: package ... import( ... ) ... type ir_table struct{ symbol string value string } var ir_MAP map[int]ir_table 因为我没有初始化映射,所以我得到了一个零指针解引用错误。要全局使用此变量,我必须做什么?或者,如果这不是正确的方法,请指导我。您需要使用空映射对其进行初始化: var ir_M

我需要一些关于在Go中创建全局映射变量的帮助。我所做的工作如下:

package ...
import(
...
)
...
type ir_table struct{
    symbol      string
    value       string
}
var ir_MAP map[int]ir_table

因为我没有初始化映射,所以我得到了一个零指针解引用错误。要全局使用此变量,我必须做什么?或者,如果这不是正确的方法,请指导我。

您需要使用空映射对其进行初始化:

var ir_MAP = map[int]ir_table{}
或者,正如“系统”所建议的那样:

var ir_MAP = make(map[int]ir_table)

问题是地图的零值为零,并且您不能向零地图添加项目。

您几乎完全正确。你只是还没有初始化你的地图

下面是中的工作代码


老话题,但最优雅的解决方案尚未提及。 这在无法在主函数中赋值的模块中非常有用。init只执行一次,因此每次需要初始化映射时,它都会节省一些CPU周期


可以像这样直接初始化贴图:

var Romans = map[byte]int{
    'I': 1,
    'V': 5,
    'X': 10,
    'L': 50,
    'C': 100,
    'D': 500,
    'M': 1000,
}

初始化它
var-ir\u-MAP=make(MAP[int]ir\u表)
为什么这
ir\u-MAP:=make(MAP[int]ir\u表{})
?由于全局变量给出错误:
函数体外部的非声明语句
@overexchange,使用
:=
声明变量仅在函数内部有效。在函数外部,您需要使用
var
。是的,但是这个想法是什么?对于全局与非全局的
:=
用法的语法更改,所有顶级声明都以指示声明类型的关键字开头。(
func
var
const
package main

import (
    "fmt"
)

var (
    globalMap = make(map[string]string)
)

func init() {
    globalMap["foo"] = "bar"
    globalMap["good"] = "stuff"
}

func main() {
    fmt.Printf("globalMap:%#+v", globalMap)
}
var Romans = map[byte]int{
    'I': 1,
    'V': 5,
    'X': 10,
    'L': 50,
    'C': 100,
    'D': 500,
    'M': 1000,
}