query: honor Encoder on interface fields

reflectValue checked sv.Type().Implements(encoderType) against the static
field type, so a value stored in an interface{} field never used its
EncodeValues method and fell back to default formatting. Unwrap the interface
first so the concrete type's Encoder is seen.

Fixes #121

Signed-off-by: Charlie Tonneslan <cst0520@gmail.com>
2 files changed
tree: 67dc7dafb8a791d8c5d07f2dda35e921d524232f
  1. .github/
  2. query/
  3. .gitignore
  4. .golangci.yml
  5. CONTRIBUTING.md
  6. go.mod
  7. go.sum
  8. LICENSE
  9. README.md
README.md

go-querystring

Go Reference Test Status Test Coverage

go-querystring is a Go library for encoding structs into URL query parameters.

Usage

import "github.com/google/go-querystring/query"

go-querystring is designed to assist in scenarios where you want to construct a URL using a struct that represents the URL query parameters. You might do this to enforce the type safety of your parameters, for example, as is done in the go-github library.

The query package exports a single Values() function. A simple example:

type Options struct {
  Query   string `url:"q"`
  ShowAll bool   `url:"all"`
  Page    int    `url:"page"`
}

opt := Options{ "foo", true, 2 }
v, _ := query.Values(opt)
fmt.Print(v.Encode()) // will output: "q=foo&all=true&page=2"

See the package godocs for complete documentation on supported types and formatting options.

Alternatives

If you are looking for a library that can both encode and decode query strings, you might consider one of these alternatives: