2010-05-11 7 views
32

posiadające niektóre mapy zdefiniowany jako:Pointer na mapie

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

chciałbym zmienną wskazującą na adres mapach (aby nie kopiować wszystkie zmienne). Próbowałem go za pomocą:

valueTo := &valueToSomeType 
nameTo := &nameToSomeType 

ale przy użyciu valueTo[number], to pokazuje
błędzie kompilator wewnętrzny: var bez typu, init: nowy

jak je zdobyć?

Edit

Błąd został pokazał inny problem.

Odpowiedz

73

Mapy są typami odniesienia, więc są zawsze przekazywane przez odniesienie. Nie potrzebujesz wskaźnika.

+1

Zajrzyj tutaj: https://dave.cheney.net/2017/04/29/there-is-no-pass-by-reference-in-go – Joppe

+0

Tak, Dave opisał to lepiej. Przeczytaj jego wpis na blogu. – Mue

37

Dokładniej z 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

Jednak w przypadku function calls parametry przekazywane są wartością (zawsze).
Poza wartością parametru mapy jest wskaźnik.

+0

więc kto ma rację? –

+2

@JuliusF oba, ale jestem bardziej precyzyjny w mojej odpowiedzi: wskaźnik jest przekazywany przez wartość. Więcej informacji o "przekazywaniu wartości" na stronie http://stackoverflow.com/a/23046811/6309. – VonC