php reflect,reflect

本文探讨了Go语言中的反射特性,通过`reflect.TypeOf`和`reflect.ValueOf`函数展示了如何在运行时检查和操作对象。尽管反射提供了动态语言的一些功能,如查看接口变量类型和结构体字段,但因其性能开销, zap包中尽量避免使用。文章还介绍了如何从`reflect.Value`还原原始结构,并强调在考虑性能时需谨慎使用反射。
摘要由CSDN通过智能技术生成

反射, 由于接口的存在让golang具有了动态语言的一些特性, 反射提供了一种在运行时操作任意类型对象的能力. 而且ide好像都很依赖反射.

查看接口变量的具体类型

查看结构体的字段

修改某个字段的值

但是在zap包中, 极力避免反射, 原因就是反射耗性能呀.

这个包真的大... 看不完了 . byebye. 常用而且重要的来看吧

TypeOf -- TypeOf returns the reflection Type that represents the dynamic type of i

ValueOf --

package main

import (

"fmt"

"reflect"

)

type User struct{

Name string

Age int

}

func main() {

u := User{"张三", 20}

t := reflect.TypeOf(u)

v := reflect.ValueOf(u)

fmt.Println(t)

fmt.Println(v)

// 等价于 注意是 大T小v

fmt.Printf("%T\n",u)

fmt.Printf("%v\n",u)

// 从reflect.Value 转换会 原始结构

// 这里可以还原的原因是因为在Go的反射中,

// 把任意一个对象分为reflect.Value和reflect.Type,

// 而reflect.Value又同时持有一个对象的reflect.Value和reflect.Type,

// 所以我们可以通过reflect.Value的Interface方法实现还原。

uu := v.Interface().(User)

fmt.Println(uu)

tt := v.Type()

fmt.Println(tt)

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值