Description

    type tHeader struct {
        Limit  int `header:"limit"`
        Limit2 int `json:"limit"`
    }

If my http request header has limit , I want only math tag: "header:"limi"

Expectations

func TestHeaderBinding(t *testing.T) {
    h := Header
    assert.Equal(t, "header", h.Name())

    type tHeader struct {
        Limit  int `header:"limit"`
        Limit2 int `json:"limit"`
    }

    var theader tHeader
    req := requestWithBody(http.MethodGet, "/", "")
    req.Header.Add("limit", "1000")
    require.NoError(t, h.Bind(req, &theader))
    assert.Equal(t, 1000, theader.Limit)
    assert.Equal(t, 0, theader.Limit2)

    req = requestWithBody(http.MethodGet, "/", "")
    req.Header.Add("fail", `{fail:fail}`)

    type failStruct struct {
        Fail map[string]any `header:"fail"`
    }

    err := h.Bind(req, &failStruct{})
    require.Error(t, err)
}

Comment From: xishengcai

open ai has been give answer:


    if vKind != reflect.Struct || !field.Anonymous {
        if _, exists := field.Tag.Lookup(tag); exists {
            ok, err := tryToSetValue(value, field, setter, tag)
            if err != nil {
                return false, err
            }
            if ok {
                return true, nil
            }
        }
    }