2016-05-12 112 views
2

我希望我可以恢复我的类型结构并声明该类型的变量。Go Relflect声明类型struct

我试着反思,但我找不到方法。

package main 

import (
    "fmt" 
    "reflect" 
) 

type M struct { 
    Name string 
} 

func main() { 
    type S struct { 
     *M 
    } 

    s := S{} 
    st := reflect.TypeOf(s) 
    Field, _ := st.FieldByName("M") 
    Type := Field.Type 
    test := Type.Elem() 
    fmt.Print(test) 
} 

回答

2

使用reflect.New与你喜欢的类型,这里使用反射的M结构的新实例设置Name的例子:

package main 

import (
    "fmt" 
    "reflect" 
) 

type M struct { 
    Name string 
} 

func main() { 
    type S struct { 
     *M 
    } 

    s := S{} 
    mStruct, _ := reflect.TypeOf(s).FieldByName("M") 
    mInstance := reflect.New(mStruct.Type.Elem()) 
    nameField := mInstance.Elem().FieldByName("Name") 
    nameField.SetString("test") 
    fmt.Print(mInstance) 
}