reflection - Create new object knowing reflected type -
in function, 1 of arguments i'm passing
reflect.typeof(person) where person struct few strings. if function accepts argument, want instantiate empty struct knowing reflected type.
i have tried following
ins := reflect.new(typ) //typ name or passed reflect.typeof(person) but returns me nil. doing wrong?
to tell you're doing wrong should see more of code. simple example how want:
type person struct { name string age int } func main() { p := person{} p2 := create(reflect.typeof(p)) p3 := p2.(*person) p3.name = "bob" p3.age = 20 fmt.printf("%+v", p3) } func create(t reflect.type) interface{} { p := reflect.new(t) fmt.printf("%v\n", p) pi := p.interface() fmt.printf("%t\n", pi) fmt.printf("%+v\n", pi) return pi } output (go playground):
<*main.person value> *main.person &{name: age:0} &{name:bob age:20} reflect.new() returns value of reflect.value. returned value represents pointer new 0 value specified type.
you can use value.interface() extract pointer.
value.interface() returns value of type interface{}. can't return concrete type, general empty interface. empty interface not struct, can't refer field. may (and in case does) hold value of *person. can use type assertion obtain value of type *person.
Comments
Post a Comment