2013-05-09 24 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: int türünde değer yazmanız atanamama * intYansıtmayı kullanarak, bir struct pointer alanının değerini nasıl başlatırsınız?

* D varsayılan değer kullanımını ayarlamak Sen (Bir gösterici değeri olması gerekir

+0

; 'D 'nil' başlar bir gösterici deneyin. Hiçbir yere işaret etmiyor, bu yüzden "D" yi ayarlamak mantıklı değil. – newacct

cevap

13

yansıtacak şekilde nasıl * int), ancak func Zero(typ Type) Value için reflect belgelerine durumları:

döndürülen değer adreslenebilir ne de ayarlanabilir ne olduğunu. Senin durumunda

yerine New kullanabilirsiniz:

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

bu

var i int 
f.Set(reflect.ValueOf(&i)) 
İlgili konular