Skip to content

Commit

Permalink
更新0602
Browse files Browse the repository at this point in the history
  • Loading branch information
ffhelicopter committed Jun 3, 2019
1 parent c6da21e commit 1f6880b
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions content/42_27_reflect.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

## 27.1 反射(reflect)

反射是应用程序检查其所拥有的结构尤其是类型的一种能力这是元编程的一种形式每种语言的反射模型都不同并且有些语言根本不支持反射Go语言实现了反射反射机制就是在运行时动态调用对象的方法和属性标准库reflect提供了相关的功能在reflect包中通过reflect.TypeOf(),reflect.ValueOf()分别从类型值的角度来描述一个Go对象
反射是应用程序检查其所拥有的结构尤其是类型的一种能每种语言的反射模型都不同并且有些语言根本不支持反射Go语言实现了反射反射机制就是在运行时动态调用对象的方法和属性标准库reflect提供了相关的功能在reflect包中通过reflect.TypeOf(),reflect.ValueOf()分别从类型值的角度来描述一个Go对象

```Go
func TypeOf(i interface{}) Type
Expand Down Expand Up @@ -33,7 +33,7 @@ reflect.Type 和 reflect.Value 都有许多方法用于检查和操作它们。
Type主要有:
Kind() 将返回一个常量,表示具体类型的底层类型
Elem()方法返回指针、数组、切片、map、通道的基类型,这个方法要慎用,如果用在其他类型上面会出现panic
Elem()方法返回指针、数组、切片、字典、通道的基类型,这个方法要慎用,如果用在其他类型上面会出现panic
Value主要有:
Type() 将返回具体类型所对应的 reflect.Type(静态类型)
Expand Down Expand Up @@ -127,7 +127,7 @@ func main() {
}
```

虽然反射可以越过Go语言的导出规则的限制读取结构体中未导出的成员但不能修改这些未导出的成员因为一个struct中只有被导出的字段才是settable的
虽然反射可以越过Go语言的导出规则的限制读取结构体中未导出的成员但不能修改这些未导出的成员因为一个结构体中只有被导出的字段才是可修改的

在结构体中有tag标签通过反射可获取结构体成员变量的tag信息

Expand Down

0 comments on commit 1f6880b

Please sign in to comment.