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

パニック:reflect.Set:int型の値は、型に代入できません*値の使用をデフォルトに* Dを設定する方法リフレクションを使用して、構造体ポインタフィールドの値をどのように初期化しますか?

をint型

+0

'D 'は' nil'を開始し、ポインタ、ですしてみてください。それはどこにも指さないので、「* Dを設定する」のは意味がありません – newacct

答えて

13

を反映あなたは*(ポインタ値を持っている必要がありますint型)が、func Zero(typ Type) Valuereflectドキュメントの状態:

返された値がアドレス指定可能でも設定可能でもありません。あなたのケースでは

あなたの代わりにNewを使用することができます。

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

この

var i int 
f.Set(reflect.ValueOf(&i)) 
関連する問題