3. 反射案例

3.1. 反射创建实例

样例如下

package main

import (
    "fmt"
    "reflect"
)

func main() {

    var a int

    // 取变量a的反射类型对象
    typeOfA := reflect.TypeOf(a)

    // 根据反射类型对象创建类型实例
    aIns := reflect.New(typeOfA)

    // 输出Value的类型和种类
    fmt.Println(aIns.Type(), aIns.Kind())
}

3.2. 反射调用函数

package main

import (
	"fmt"
	"reflect"
)

func add(a, b int) int {
	return a + b
}

func main() {
	fv := reflect.ValueOf(add)

	paramList := []reflect.Value{
		reflect.ValueOf(10),
		reflect.ValueOf(20),
	}
	retList := fv.Call(paramList)
	fmt.Println(retList[0].Int())
}