golang反射

1、基本介紹

  1. 反射能夠在運行時動態獲取變量的各類信息,好比變量的類型(type),類別(kind)
  2. 若是是結構體變量,還能夠獲取到結構體自己的信息(包括結構體的字段、方法)
  3. 經過反射,能夠修改變量的值,能夠調用關聯的方法
  4. 使用反射,須要import("reflect")

2、反射重要的函數和概念

  1. reflect.TypeOf(變量名),獲取變量的類型,返回reflect.Type類型
  2. reflect.ValueOf(變量名),獲取變量的值,返回reflect.Value類型reflect.Value 是一個結構體類型,經過reflect.Value,能夠獲取到關於該變量的不少信息。
  3. 變量、interface{}和reflect.Value是能夠相互轉換的,這在實際開發中,常常用到
var student Student
var number int
//專門作反射
func test(b interface{}) {
    // 1.如何將interface{} 轉成reflect.Value
    rval = reflect.ValueOf(b)
    // 2.如何將reflect.ValueOf轉爲interface{}
    iVal := rVal.Interface{}
    // 3.如何將interface{}轉成原來的變量類型,使用類型斷言便可
    v := iVal.(Student)
}

3、常量

  • 常量使用const修飾
  • 常量在定義的時候,必須初始化
  • 常量不能修改
  • 常量只能修飾bool、數值類型(int、float系列)、string類型
  • 語法:const identifier [type] = value

4、反射注意事項和細節說明

  1. reflect.Value.Kind,獲取變量的類別,返回的是一個常量
  2. Type是類型,Kind是類別,Type和Kind可能相同也可能不一樣好比:var number int 的Type和Kind都是int,好比:var stu Student stu的Type是包名.Student,Kind是struct
  3. 經過反射可讓變量在interface{}和Reflect.Value之間相互轉換,變量<---->interface{}<---->reflect.Value
  4. 使用反射的方式獲取變量的值(並返回相應的類型),要求數據類型匹配,好比x是int,那麼就應該使用reflect.Value(x).Int(),而不能使用其餘
  5. 經過反射來修改變量,注意當使用Setxxx方法來設置須要經過對應的指針類型來完成,同事須要使用到reflect.Value.Elem()方法
相關文章
相關標籤/搜索