2010-05-11 31 views
32

haber algunos mapas define como:Puntero a un mapa

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

me gustaría que una variable que apunta a la dirección de los mapas (a no copiar toda variable). Lo probé usando:

valueTo := &valueToSomeType 
nameTo := &nameToSomeType 

pero al usar valueTo[number], muestra
de error interno del compilador: var sin tipo, init: nueva

¿Cómo conseguirlo?

Editar

El error se mostraron por otro problema.

Respuesta

73

Los mapas son tipos de referencia, por lo que siempre se pasan por referencia. No necesitas un puntero.

+1

Echa un vistazo aquí: https://dave.cheney.net/2017/04/29/there-is-no-pass-by-reference-in-go – Joppe

+0

Sí, Dave lo describió mejor. Lee su entrada de blog. – Mue

37

Más específicamente, desde el 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

Sin embargo, respecto function calls, se pasan los parámetros por valor (siempre).
Excepto que el valor de un parámetro de mapa es un puntero.

+0

¿quién tiene razón? –

+2

@JuliusF ambos, pero soy más preciso en mi respuesta: el puntero se pasa por valor. Más sobre "pasar por valor" en http://stackoverflow.com/a/23046811/6309. – VonC

Cuestiones relacionadas