通过反射创建结构体
练习通过反射创建结构体时写的代码
package main
import (
"fmt"
"reflect"
)
type Student struct {
Name string `json:"name"`
Id int `json:"id"`
}
func main() {
var (
model *Student
st reflect.Type
vl reflect.Value
)
st = reflect.TypeOf(model) //获取类型
st = st.Elem() //获取指向的类型
fmt.Println(st) //main.Student
vl = reflect.New(st) //创建一个指向st类型的指针,本身为val类型
fmt.Printf("%v,%T\n",vl,vl) //&{ 0},reflect.Value{ 0}
vl = vl.Elem() //获取指针指向的vl的值
fmt.Printf("%v,%T\n",vl,vl) //{ 0},reflect.Value
vl.Field(0).SetString("lalala") //给第一个值赋值
vl.Field(1).SetInt(15) //给第二个值赋值
fmt.Printf("%T\n",vl) //reflect.Value
m := vl.Interface()
m = m.(Student)
fmt.Printf("%T",m) //main.Student
}
}