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
}
}
}