Go基础 -- 27 反射编程

在这里插入图片描述

package reflect

import (
	"fmt"
	"reflect"
	"testing"
)

func CheckType(v interface{}){
	t := reflect.TypeOf(v)
	switch t.Kind() {
	case reflect.Float32,reflect.Float64:
		fmt.Println("Float")
	case reflect.Int,reflect.Int64:
		fmt.Println("Int")
	default:
		fmt.Println("Unknow")
	}
}

func TestBasicType(t *testing.T){
	var v float64 = 12
	CheckType(v)
}

func TestTypeAndValue(t *testing.T){
	var f int64 = 10
	t.Log(reflect.TypeOf(f),reflect.ValueOf(f))
	t.Log(reflect.ValueOf(f).Type())
}

type Employ struct {
	EmployeeID string
	Name string `format:"nomal"`
	Age int
}

func (e *Employ) UpdateAge(newVal int){
	e.Age = newVal
}

type Customer struct {
	CookieId string
	Name string
	Age int
}

func TestInvokeByName(t *testing.T){
	e := &Employ{"1","Mike",30}
	t.Logf("Name: value(%[1]v),Type(%[1]T)",reflect.ValueOf(*e).FieldByName("Name"))
	if nameField,ok := reflect.TypeOf(*e).FieldByName("Name");!ok{
		t.Error("Failed to get Name filed")
	}else{
		t.Log("Tag:format",nameField.Tag.Get("format"))
	}
	reflect.ValueOf(e).MethodByName("UpdateAge").Call([]reflect.Value{reflect.ValueOf(1)})
	t.Log("Updated Age:",e)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值