web-dev-qa-db-fra.com

initialiser le pointeur de chaîne dans la structure

Go Newbie question: J'essaie d'initier la structure suivante, avec une valeur par défaut. Je sais que cela fonctionne si "Uri" est une chaîne et non un pointeur vers une chaîne (* chaîne). Mais j'ai besoin de ce pointeur pour comparer deux instances de la structure, où Uri serait nul s'il n'était pas défini, par exemple quand je démarshal le contenu d'un fichier json. Mais comment puis-je initialiser une telle structure correctement en tant que "défaut statique"?

type Config struct {
  Uri       *string
}

func init() {
  var config = Config{ Uri: "my:default" }
}

Le code ci-dessus échoue avec

cannot use "string" (type string) as type *string in field value
12
Mandragor

Il n'est pas possible d'obtenir l'adresse (au point) d'une valeur constante, c'est pourquoi votre initialisation échoue. Si vous définissez une variable et passez son adresse, votre exemple fonctionnera.

type Config struct {
  Uri       *string
}

func init() {
  v := "my:default"
  var config = Config{ Uri: &v }
}
19
Nadh