我需要一些关于在Go中创建全局地图变量的帮助。我所做的如下:
package ...
import(
...
)
...
type ir_table struct{
symbol string
value string
}
var ir_MAP map[int]ir_table
由于我没有初始化地图,因此我得到一个nil指针解除引用错误。我必须做什么才能全局使用此变量?或者,如果这不是一个正确的方法,请指导我。
答案 0 :(得分:32)
您需要使用空地图初始化它:
var ir_MAP = map[int]ir_table{}
或者,如“系统”建议:
var ir_MAP = make(map[int]ir_table)
问题是地图的零值是零,并且您无法将项目添加到零地图。
答案 1 :(得分:7)
你几乎是对的。您尚未初始化地图。
以下是The Playground中的工作代码。
package main
import "fmt"
type ir_table struct{
symbol string
value string
}
// define global map; initialize as empty with the trailing {}
var ir_MAP = map[int]ir_table{}
func main() {
ir_MAP[1] = ir_table{symbol:"x", value:"y"}
TestGlobal()
}
func TestGlobal() {
fmt.Printf("1 -> %v\n", ir_MAP[1])
}
答案 2 :(得分:3)
您可以像这样直接初始化地图:
var Romans = map[byte]int{
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000,
}
答案 3 :(得分:0)
古老的话题,但没有提到最优雅的解决方案。 这在无法在main函数中分配值的模块中非常有用。 init仅执行一次,因此每次必须以其他方式初始化映射时,都会节省一些CPU周期。
https://play.golang.org/p/XgC-SrV3Wig
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)
}