创建全局映射变量



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

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

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

您需要使用空映射初始化它:

var ir_MAP = map[int]ir_table{}

或者,如"系统"所建议的:

var ir_MAP = make(map[int]ir_table)

问题是映射的零值是nil,你不能向nil映射添加项

你可以像这样直接初始化一个map:

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

你几乎是对的。你只是还没有初始化你的映射。

这是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 -> %vn", ir_MAP[1])
}

老话题,但最优雅的解决方案还没有提到。这在无法在main函数中赋值的模块中非常有用。init只执行一次,因此每次初始化map时可以节省一些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)
}

相关内容

  • 没有找到相关文章

最新更新