2016-05-12 60 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) 
}