创建全局映射变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建全局映射变量相关的知识,希望对你有一定的参考价值。

关于在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地图。

另一答案

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

这里是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
", ir_MAP[1])
}
另一答案

旧主题,但是没有提到最优雅的解决方案。这在无法在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)
}

以上是关于创建全局映射变量的主要内容,如果未能解决你的问题,请参考以下文章

片段 - 全局视图变量与本地和内部类侦听器和内存泄漏

如何创建片段以重复变量编号中的代码行

R Shiny中是否存在全局变量?

JS作用域作用域链

片段着色器中的球面映射

在创建VSCode片段时,如何将变量转换为title-case(如TitleCase)?