[TOC]
## 基本介紹
1. 反射可以在運行時動態獲取變量的各種信息,比如變量的類型type,類別kind
2. 如果是結構體變量,還可以獲取到結構體本身的信息(包括結構體的字段、方法)
3. 通過反射,可以修改變量的值,可以調用關聯的方法
4. 使用反射,需要import("reflect")
## 功能
1. 從接口實例獲取值
2. 從值獲取接口(空接口)
3. 從接口實例獲取值后改變這個值
## 重要函數和概念
1. reflect.TypeOf(變量名),獲取變量的類型,返回reflect.Type類型
2. reflect.ValueOf(變量名),獲取變量的值,返回reflect.Value類型,reflect.Value是一個結構體類型,通過reflect.Value可以獲取到關于該變量的很多信息
3. 變量、interface{}和reflect.Value是可以相互轉換的
## 示意圖


## 注意事項
1. reflect.Value.Kind,獲取變量的類別,返回的是一個常量
2. Type是類型,Kind是類別,Type和Kind可能是相同,也可能不同。如:int的Type是**int**,Kind也是**int**;struct的Type是**包.結構體名**,kind是**struct**
3. 通過反射可以讓變量在interface{}和reflect.value中相互轉換
4. 使用反射的方式來獲取變量的值,要求數據類型匹配。比如x是int,則需要`reflect.ValueOf(x).Int()`,也可以使用斷言
5. 通過反射來修改變量,主要當使用SetXXX方法來設置需要通過對應的指針類型來完成,這樣才能改變傳入的變量的值,同時需要使用到reflect.value.Elem()方法

- 數據類型
- 數組array
- 切片slice
- 字符串string
- map
- 結構體struct
- 方法func
- 匿名結構體(繼承)
- 字段別名
- 接口interface
- 常量
- 基礎語法
- 循環for
- 遍歷
- 函數func
- defer
- 異常處理error
- 訪問范圍
- 包
- 類型斷言
- 文件
- 打開文件
- 讀取文件
- 寫文件
- 判斷是否存在
- 拷貝文件
- JSON
- 序列化
- 反序列化
- 命令行
- 雜項
- Windows下配置加速
- 相關鏈接
- 占位符
- 隨機數rand
- 單元測試
- goroutine
- 并發和并行
- 協程和主線程
- MPG模式
- 設置CPU數量
- 全局互斥鎖
- 管道
- 示例1
- 示例2
- select
- 異常捕獲
- 反射
- 示例
- 示例-改變值
- 網絡編程
- TCP編程
- 示例一
- redis