2010-05-11 18 views
32

Ayant des cartes défini comme:pointeur sur une carte

var valueToSomeType = map[uint8]someType{...} 
var nameToSomeType = map[string]someType{...} 

Je veux une variable qui pointe à l'adresse des cartes (à ne pas copier toutes les variables). Je l'ai essayé en utilisant:

valueTo := &valueToSomeType 
nameTo := &nameToSomeType 

mais à l'aide valueTo[number], il montre
erreur du compilateur interne: var sans type INIT: nouvelle

Comment l'obtenir?

Modifier

L'erreur a été montré par un autre problème.

Répondre

73

Les cartes sont les types de référence, ils sont AllWays passés par référence. Vous n'avez pas besoin de pointeur.

+1

Jetez un coup d'oeil ici: https://dave.cheney.net/2017/04/29/there-is-no-pass-by-reference-in-go – Joppe

+0

Oui, Dave décrit mieux. Lisez son entrée de blog. – Mue

37

Plus précisément, de la Golang Specs:

Slices, maps and channels are reference types that do not require the extra indirection of an allocation with new .
The built-in function make takes a type T , which must be a slice, map or channel type, optionally followed by a type-specific list of expressions.
It returns a value of type T (not *T).
The memory is initialized as described in the section on initial values

Cependant, en ce qui concerne function calls, les paramètres sont transmis en valeur (toujours).
Sauf que la valeur d'un paramètre de carte est un pointeur.

+0

alors qui a raison? –

+2

@JuliusF à la fois, mais je suis plus précis dans ma réponse: le pointeur est passé par valeur. Plus sur le "passer par la valeur" à http://stackoverflow.com/a/23046811/6309. – VonC