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\n", ir_MAP[1])
}
古いトピックですが、最もエレガントなソリューションは言及されていません。これは、メイン関数で値を割り当てることができないモジュールで非常に役立ちます。 initは1回だけ実行されるため、マップを初期化する必要があるたびに数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)
}