go-querystring icon indicating copy to clipboard operation
go-querystring copied to clipboard

Support alternative struct tags (instead of `url`)

Open emmanuel opened this issue 6 years ago • 6 comments

We use Gin, and we're looking at using this library. Gin provides a BindQuery method, which decodes query params from a request into a struct, so long as the incoming request matches the expected names, expressed via the struct tag form.

We'd like to be able to use the same struct tags for encoding and decoding. In order to do so, we'd like to be able to configure this library to reflect on a different struct tag during encoding. In our case, we'd like to be able to configure this library to use the same struct tag as Gin, i.e., the form tag.

Would you be open to a PR that implements configurable struct tags?

I'm not sure what the best mechanism would be, perhaps a build flag or ENV_VAR. Any suggestions here would be most welcome.

emmanuel avatar Jun 03 '19 20:06 emmanuel

Is this still a problem for you, or did you end up working around it?

If it's still a desirable feature, does anyone have pointers to examples of other libraries that do this? #15 does provide an implementation, but I just don't think I've ever seen a library that allows customizing struct tags like this, so would love to see any prior art before making any decisions.

willnorris avatar Feb 24 '21 00:02 willnorris

There IS such kind of scenarios. We now have two:

  • Migrate some struct definitions from older ones, such as some struct defined by json tags
  • Generate some customized tags different from url query for different internal systems. For example, In system A, we use camel style, but some snake style.
type config struct {
    Username string `sys1:"username"  sys2:"loginname"`
}

However, I prefer passing tag as a runtime parameter instead of pre-binding. Such as:

v, _ := query.ValuesByTag(&conf, "sys1")

Andrew-M-C avatar Jun 15 '21 02:06 Andrew-M-C

Hey @willnorris , we need this feature too, we are are working with gin +go-querystring and we have to tag both form and url in all of our params structs. Specifying custom tag for encoding will reduce chances of bugs when not setting both tags, and improve readability to our code. I hope you can reconsider merging https://github.com/google/go-querystring/pull/15 .

maxlevinps avatar Feb 06 '22 09:02 maxlevinps

We have the same use case that would be great to solve using this library.

NilsJPWerner avatar Mar 01 '22 19:03 NilsJPWerner