Golang基础(5):Go语言反射规则
Go语言反射规则 - The Laws of Reflection 转: http://my.oschina.net/qbit/blog/213720 原文地址: http://blog.golang.org/laws-of-reflection 介绍 反射在计算机的概念里是指一段程序审查自身结构的能力,主要通过类型进行审查。它是元编程的一种形式,同样也是引起混乱的重大来源。 在这篇文章里我们试图阐明Go语言中的反射是如何工作的。每种语言的反射模型是不同的(许多语言不支持反射),然而本文只与Go有关,所以我们接下来所提到的“反射”都是指Go语言中的反射。 类型与接口 由于反射是建立在类型系统(type system)上的,所以我们先来复习一下Go语言中的类型。 Go是一门静态类型的语言。每个变量都有一个静态类型,类型在编译的时后被知晓并确定了下来。 ? 1 2 3 4 type MyInt int var i int var j MyInt 变量 i 的类型是 int ,变量 j 的类型是 MyInt 。虽然它们有着相同的基本类型,但静态类型却不一样,在没有类型转换的情况下,它们之间无法互相赋值。 接口是一个重要的类型,它意味着一个确定的的方法集合。一个接口变量可以存储任何实现了接口的方法的具体值(除了接口本身)。一个著名的例子就是 io.Reader 和 io.Writer :