From 097b26f318cedf65346d0ebeee8ba9bc7bf45693 Mon Sep 17 00:00:00 2001 From: the harder the luckier Date: Mon, 4 Sep 2023 20:11:14 +0800 Subject: [PATCH] fix: multiple interfaces cause the original type to be inaccessible (#2915) --- util/gconv/gconv_convert.go | 2 +- util/gconv/gconv_z_unit_converter_test.go | 25 +++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/util/gconv/gconv_convert.go b/util/gconv/gconv_convert.go index 609d9e61e..983fdb919 100644 --- a/util/gconv/gconv_convert.go +++ b/util/gconv/gconv_convert.go @@ -194,7 +194,7 @@ func doConvert(in doConvertInput) (convertedValue interface{}) { } return Time(in.FromValue) case "*time.Time": - var v interface{} + var v time.Time if len(in.Extra) > 0 { v = Time(in.FromValue, String(in.Extra[0])) } else { diff --git a/util/gconv/gconv_z_unit_converter_test.go b/util/gconv/gconv_z_unit_converter_test.go index c477391d7..c839f48b9 100644 --- a/util/gconv/gconv_z_unit_converter_test.go +++ b/util/gconv/gconv_z_unit_converter_test.go @@ -8,7 +8,9 @@ package gconv_test import ( "testing" + "time" + "github.com/gogf/gf/v2/os/gtime" "github.com/gogf/gf/v2/test/gtest" "github.com/gogf/gf/v2/util/gconv" ) @@ -43,6 +45,12 @@ func TestConverter_Struct(t *testing.T) { ValTa tB } + type tEE struct { + Val1 time.Time `json:"val1"` + Val2 *time.Time `json:"val2"` + Val3 *time.Time `json:"val3"` + } + gtest.C(t, func(t *gtest.T) { a := &tA{ Val: 1, @@ -174,6 +182,23 @@ func TestConverter_Struct(t *testing.T) { t.Assert(dd.ValTa.Val1, 234) t.Assert(dd.ValTa.Val2, "abc") }) + + // fix: https://github.com/gogf/gf/issues/2665 + gtest.C(t, func(t *gtest.T) { + aa := &tEE{} + + var tmp = map[string]any{ + "val1": "2023-04-15 19:10:00 +0800 CST", + "val2": "2023-04-15 19:10:00 +0800 CST", + "val3": "2006-01-02T15:04:05Z07:00", + } + err := gconv.Struct(tmp, aa) + t.AssertNil(err) + t.AssertNE(aa, nil) + t.Assert(aa.Val1.Local(), gtime.New("2023-04-15 19:10:00 +0800 CST").Local().Time) + t.Assert(aa.Val2.Local(), gtime.New("2023-04-15 19:10:00 +0800 CST").Local().Time) + t.Assert(aa.Val3.Local(), gtime.New("2006-01-02T15:04:05Z07:00").Local().Time) + }) } func TestConverter_CustomBasicType_ToStruct(t *testing.T) {