犀牛云网站建设公司,陕西电商网站建设,html5网站制作实战,大连网站建设多少钱GO语言篇之反射 文章目录 GO语言篇之反射前言获取变量类型获取变量值获取结构体的字段#xff0c;方法#xff0c;动态地修改#xff0c;调用结构体的字段和方法创建变量缺点 前言
Go语言可以在运行期间查看自身结构#xff0c;在运行时动态地获取结构体的信息#xff0c…GO语言篇之反射 文章目录 GO语言篇之反射前言获取变量类型获取变量值获取结构体的字段方法动态地修改调用结构体的字段和方法创建变量缺点 前言
Go语言可以在运行期间查看自身结构在运行时动态地获取结构体的信息如字段类型字段数量方法列表等动态调用方法
获取变量类型
var num int
reflect.TypeOf(num)获取变量值
var s hello reflect
reflect.ValueOf(s)获取结构体的字段方法动态地修改调用结构体的字段和方法
type Cat struct {Name stringAge int
}func (c Cat) Hi(name string) string {return 你好 name
}cat : Cat{Name: 汤姆, Age: 10}
val : reflect.ValueOf(cat).Elem()
val.FieldByName(Name).SetString(小猫咪)
val.FieldByName(Age).SetInt(12)
args : []reflect.Value{reflect.ValueOf(大黄)}
result : val.MethodByName(Hi).Call(args)
fmt.Println(result[0].String())创建变量
reflect.MakeSlice(reflect.TypeOf([]string(nil)), 0, 3)reflect.MakeChan(reflect.TypeOf((chan int)(nil)), 3)reflect.MakeMap(reflect.TypeOf(map[string]int(nil)))reflect.MakeMapWithSize(reflect.TypeOf(map[string]int(nil)), 3)reflect.MakeFunc(reflect.TypeOf(func(a, b int) int {return a b
}), func(args []reflect.Value) (results []reflect.Value) {return []reflect.Value{reflect.ValueOf(args[0].Int() * args[1].Int())}
})缺点 反射可能会降低性能因为反射需要运行时动态地获取类型信息因此需要在使用的过程中权衡利弊