2012-12-18 14 views
5

Ho scritto un simple program utilizzando il Go Playground di golang.org.Vai: modifica al posto dei valori della mappa

L'output è ovviamente:

second test 
first test 

Esiste un modo per modificare il valore mappa in luogo? So che non posso prendere l'andin di a.Things[key]. Quindi, sta impostando a.Things[key] = firstTest l'unico modo per farlo? Forse con una funzione ChangeThing(key string, value string)?

risposta

6

È possibile farlo impostando i valori dei puntatori della mappa su un'altra struttura.

http://play.golang.org/p/UouwDGuVpi

package main 

import "fmt" 

type A struct { 
    Things map[string]*str 
} 

type str struct { 
    s string 
} 

func (a A) ThingWithKey(key string) *str { 
    return a.Things[key] 
} 

func main() { 
    variable := A{} 

    variable.Things = make(map[string]*str) 
    variable.Things["first"] = &str{s:"first test"} 

    firstTest := variable.ThingWithKey("first") 
    firstTest.s = "second test" 

    fmt.Println(firstTest.s) 
    fmt.Println(variable.ThingWithKey("first").s) 
} 
+0

Grazie! Non ci ho pensato. Il tuo suggerimento funziona alla grande per me. – Donovan

3

È possibile utilizzare un puntatore come valore mappa http://play.golang.org/p/BCsmhevGMX

+0

Grazie, questo ha aiutato. – Donovan

+0

L'ho provato in realtà, ma il compilatore non mi permetteva di prendere un indirizzo di una stringa letterale. Vedo che l'hai aggirato assegnando prima la stringa a una variabile e poi prendendo l'indirizzo della variabile. Mi chiedo il motivo per cui posso prendere l'indirizzo di un'inizializzazione della struct ma non dell'inizializzazione di una stringa. – Daniel

Problemi correlati