2013-05-09 12 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) 
} 

Panik: reflect.Set: Wert int vom Typ ist nicht übertragbar * intMit Reflect, wie initialisieren Sie den Wert eines Strukturzeigerfeldes?

zu geben, wie man das einstellen * D-Wert Verwendung auf Standard reflektiert

+0

'D' ist ein Zeiger, der 'nil' beginnt. Es zeigt nirgendwo hin, es macht also keinen Sinn, das * D zu setzen – newacct

Antwort

13

Sie benötigen einen Zeigerwert haben (* int), aber die reflect Dokumentation wird für func Zero(typ Type) Value, die:

Der zurückgegebene Wert ist weder ansprechbar noch einstellbar ist.

In Ihrem Fall können Sie stattdessen New verwenden:

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

versuchen diese

var i int 
f.Set(reflect.ValueOf(&i)) 
Verwandte Themen