fix: multiple interfaces cause the original type to be inaccessible (#2915)

This commit is contained in:
the harder the luckier 2023-09-04 20:11:14 +08:00 committed by GitHub
parent 3da5e5e865
commit 097b26f318
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 1 deletions

View File

@ -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 {

View File

@ -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) {