golang 类型断言与反射
session("user")是在另一个页面设置的,存储了一个models.User类型的struct
var user models.User
u := this.GetSession("user") 获得session user,这里u是一个interface
user = u.(models.User) 类型断言,我断言这个U的类型就是models.User类型的,然后我把他赋值给另一个models.User类型的变量
fmt.Println(user.Id) 这里我就可以访问session user的值了
u := this.GetSession("user") //取得一个interface
v := reflect.ValueOf(u)//反射得到这个变量的类型
fmt.Println(v.Field(0).Int())//取存储在第0格的值
fmt.Println(v.Elem().Field(1).String())//取存储在第1格的值
t := reflect.TypeOf(u)//得到这个变量的类型
fmt.Println(t)
acc.Username = "hello"
val := reflect.ValueOf(acc).FieldByName("Username") //请取反射中的Username字段
var acc models.Account
acc.Username = "hello"
p := reflect.ValueOf(&acc.Username) //反射取值
v := p.Elem() //反射对象 p并不是可寻址的,但是并不希望设置p,(实际上)是 *p。为了获得 p 指向的内容,调用值上的 Elem 方法,从指针间接指向,然后保存反射值的结果叫做 v
v.SetString("worldv.SetString("world")//反射给对象赋值
fmt.Println(acc)
func test(a string) string { return a } func main() { a := "sssssss" args := []reflect.Value{reflect.ValueOf(a)}//获得一个[]reflect.Value c := reflect.ValueOf(test).Call(args)//反射函数的值,并调用 fmt.Println(c) }
获得一个反射的类型
v := reflect.ValueOf(user)
fmt.Println(v.Type().String())//取得一个反射的类型
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。