J'ai besoin d'un peu d'aide concernant la création d'une variable de carte globale dans Go. Ce que j'ai fait est le suivant:
package ...
import(
...
)
...
type ir_table struct{
symbol string
value string
}
var ir_MAP map[int]ir_table
Comme je n'initialise pas la carte, j'obtiens une erreur de déréférencement de pointeur nul. Que dois-je faire pour utiliser cette variable globalement? Ou, si ce n'est pas une bonne façon de procéder, veuillez me guider.
Vous devez l'initialiser avec une carte vide:
var ir_MAP = map[int]ir_table{}
ou, comme "le système" l'a suggéré:
var ir_MAP = make(map[int]ir_table)
Le problème est que la valeur zéro d'une carte est nulle et que vous ne pouvez pas ajouter d'éléments à une carte nulle.
Vous avez presque raison. Vous n'avez tout simplement pas encore initialisé votre carte.
Voici le code de travail dans 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])
}
ancien sujet, mais la solution la plus élégante n'a pas été mentionnée. Ceci est très utile dans les modules où il n'est pas possible d'assigner des valeurs dans la fonction principale. init n'est exécuté qu'une seule fois, ce qui permet d'économiser quelques cycles de processeur à chaque fois que la carte devrait être initialisée autrement.
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)
}