美文网首页
Go笔记-Chap10 反射

Go笔记-Chap10 反射

作者: leon4ever | 来源:发表于2019-05-10 15:34 被阅读0次

10.1 类型

反射让我们能在运行期探知对象的类型信息和内存结构,从而弥补静态语言在动态行为上的不足。反射还是实现元编程的重要手段。

func TypeOf(i interface{}) Type
func ValueOf(i interface{}) Value

方法Elem返回指针、数组、切片、字典或通道的基类型

  • 获取结构体指针的基类型后,遍历字段
  • 对于匿名字段,用多级索引(按定义顺序)直接访问

10.2 值

Value专注于对象实例数据读写
接口遍历会复制对象,而且unaddressable,所以想修改,要用指针。

func main() {
    a := 100
    va, vp := reflect.ValueOf(a), reflect.ValueOf(&a).Elem()
    fmt.Println(va.CanAddr(), va.CanSet())
    fmt.Println(vp.CanAddr(), vp.CanSet())
}

输出

false false
true true

就算传入指针,也要通过Elem获取目标对象,因为被接口存储的指针本身不能寻址和进行设置操作

对非导出字段,不能直接进行设置操作

可通过Interface方法进行类型推断和转换
接口有两种nil状态,用IsNil判断值是否为nil

10.3 方法

动态调用方法,按In列表准备好所需参数。

10.4 构建

反射库提供了内置函数make和new的对应操作,MakeFunc可用来实现通用模板,适应不同数据类型。

相关文章

  • Go笔记-Chap10 反射

    10.1 类型 反射让我们能在运行期探知对象的类型信息和内存结构,从而弥补静态语言在动态行为上的不足。反射还是实现...

  • golang 反射机制

    go语言也有反射机制,今天自学到go的反射,发现还是很值得记录一些这个知识点的。go语言它是通过 reflect ...

  • reflect.go包学习_之二 指针操作提高反射性能 反射应用

    reflect.go包学习_之二 指针操作提高反射性能 反射应用 反射创建实例 反射信息、反射调用方法、反射修改值...

  • go反射

    reflect[https://studygolang.com/pkgdoc]:在运行时动态的获取一个变量的类型信...

  • go 反射

    反射的概念 反射就是程序能够在运行时动态的查看自己的状态,比关切允许修改自身的行为。1、GO的反射基础是接口和类型...

  • Go反射

    1、chan类型

  • go 反射

    在面对类型时,我们要区分 Type 和 Kind,前者表示真实类型(静态类型),后者表示其基础结构(底层类型)类别...

  • Go: 反射

    反射是Go中的高级语法,本文将以尽可能用简单的方式来介绍它。本文包括以下部分: 什么是反射? 如何检查一个变量及其...

  • GO 反射

    虽然在大多数的应用和服务中并不常见,但是很多框架都依赖 Go 语言的反射机制简化代码。因为 Go 语言的语法元素很...

  • Go进阶:反射3定律

    各位学习Go语言的朋友,周末好,这次跟大家聊一聊Go语言的一个高级话题:反射。 这篇文章是从我过去的学习笔记修改来...

网友评论

      本文标题:Go笔记-Chap10 反射

      本文链接:https://www.haomeiwen.com/subject/eweaoqtx.html