2013-03-02 21 views
13

Ho bisogno di un piccolo aiuto per quanto riguarda la creazione di una variabile di mappa globale in Go. Quello che ho fatto è il seguente:Crea variabili di mappa globali

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

Dato che non sono l'inizializzazione della mappa, sto ottenendo un errore di puntatore dereference nullo. Cosa devo fare per utilizzare questa variabile a livello globale? Oppure, se questo non è un modo corretto per farlo, per favore guidami.

+5

Inizializzarlo? 'var ir_MAP = make (map [int] ir_table)' –

risposta

23

è necessario inizializzare con una mappa vuota:

var ir_MAP = map[int]ir_table{} 

o, come "il sistema" ha suggerito:

var ir_MAP = make(map[int]ir_table) 

Il problema è che il valore zero di una mappa è pari a zero, e non puoi aggiungere elementi a una mappa nil.

+0

Grazie, Andy, ho usato il suggerimento di "the system". Funziona. – progfan

7

Hai quasi ragione. Non hai ancora inizializzato la tua mappa.

Questo codice funziona in 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]) 
}