2013-05-09 13 views
12
package main 

import (
    "fmt" 
    "reflect" 
) 

type A struct { 
    D *int 
} 

func main() { 
    a := &A{} 
    v := reflect.ValueOf(a) 
    e := v.Elem() 
    f := e.Field(0) 
    z := reflect.Zero(f.Type().Elem()) 
    f.Set(z) 
    fmt.Println(z) 
} 

panico: reflect.Set: valore di tipo int non è cedibile a digitare * intUtilizzando reflect, come si inizializza il valore di un campo del puntatore struct?

come impostare l'uso * D di default valore di riflettere

+0

'D' è un puntatore, che parte' quelle negative. Non punta da nessuna parte, quindi non ha senso "impostare la * D" – newacct

risposta

13

È necessario disporre di un valore di puntatore (* int), ma i reflect stati di documentazione per func Zero(typ Type) Value che:

il valore restituito è né indirizzabile né impostabile.

Nel tuo caso è possibile utilizzare invece New:

z := reflect.New(f.Type().Elem()) 
2

provare questo

var i int 
f.Set(reflect.ValueOf(&i)) 
Problemi correlati