Golang reflect 反射 struct 动态获取time.Time类型的值

承诺一时的华丽 · · 2932 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

直接上代码

package main

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

type Stu struct {
    Str  string
    Time time.Time
}

func TestTime(t *testing.T) {
    stu := Stu{Str: "test", Time: time.Now()}
    print(stu)
}

func print(t interface{})  {
    getType := reflect.TypeOf(t)
    getValue := reflect.ValueOf(t)
    for i := 0; i < getType.NumField(); i++ {
        field := getType.Field(i)
        switch field.Type.String() {
        case "time.Time":
            fmt.Printf("%s: %v = %v\n", field.Name, field.Type, getValue.Field(1).Interface().(time.Time))
            break
        default:
            value := getValue.Field(i)
            fmt.Printf("%s: %v = %v\n", field.Name, field.Type, value.String())
            break
        }
    }
}

  • test结果
=== RUN   TestTime
Str: string = test
Time: time.Time = 2020-02-25 15:51:28.1895942 +0800 CST m=+0.009973701
--- PASS: TestTime (0.02s)
PASS

Process finished with exit code 0


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:承诺一时的华丽

查看原文:Golang reflect 反射 struct 动态获取time.Time类型的值

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2932 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传