This is an automated email from the ASF dual-hosted git repository.

Alanxtl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git


The following commit(s) were added to refs/heads/develop by this push:
     new 6dea7f500 fix(generic): honor m tags during realization (#3505)
6dea7f500 is described below

commit 6dea7f500e0e5ae6c0590a08f8ffa4cf937e639a
Author: Oxidaner <[email protected]>
AuthorDate: Wed Aug 19 22:25:34 2026 +0800

    fix(generic): honor m tags during realization (#3505)
---
 filter/generic/generalizer/map.go      | 10 +++++++++-
 filter/generic/generalizer/map_test.go | 22 ++++++++++++++++++++++
 2 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/filter/generic/generalizer/map.go 
b/filter/generic/generalizer/map.go
index 2fd3c4a14..b09cc2cb1 100644
--- a/filter/generic/generalizer/map.go
+++ b/filter/generic/generalizer/map.go
@@ -68,7 +68,15 @@ func (g *MapGeneralizer) Realize(obj any, typ reflect.Type) 
(any, error) {
                obj = removeClass(obj)
        }
        newobj := reflect.New(typ).Interface()
-       err := mapstructure.Decode(obj, newobj)
+       decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{
+               Result:  newobj,
+               TagName: "m",
+       })
+       if err != nil {
+               return nil, perrors.Errorf("creating map decoder failed, %v", 
err)
+       }
+
+       err = decoder.Decode(obj)
        if err != nil {
                return nil, perrors.Errorf("realizing map failed, %v", err)
        }
diff --git a/filter/generic/generalizer/map_test.go 
b/filter/generic/generalizer/map_test.go
index 50e6d623b..00e5945eb 100644
--- a/filter/generic/generalizer/map_test.go
+++ b/filter/generic/generalizer/map_test.go
@@ -49,6 +49,11 @@ type testPlainObj struct {
        EeEe int
 }
 
+type testMTagObj struct {
+       UserID string `m:"user_id"`
+       Name   string
+}
+
 func TestObjToMap(t *testing.T) {
        obj := &testPlainObj{}
        obj.AaAa = "1"
@@ -71,6 +76,23 @@ func TestObjToMap(t *testing.T) {
        assert.Equal(t, 100, m["eeEe"].(int))
 }
 
+func TestMTagRoundTrip(t *testing.T) {
+       original := testMTagObj{
+               UserID: "42",
+               Name:   "alice",
+       }
+
+       generalized, err := mockMapGeneralizer.Generalize(original)
+       require.NoError(t, err)
+       generalizedMap, ok := generalized.(map[string]any)
+       require.True(t, ok)
+       assert.Equal(t, "42", generalizedMap["user_id"])
+
+       realized, err := mockMapGeneralizer.Realize(generalized, 
reflect.TypeOf(original))
+       require.NoError(t, err)
+       assert.Equal(t, original, realized)
+}
+
 type testStruct struct {
        AaAa string
        BaBa string `m:"baBa"`

Reply via email to