I was using gopkg.in/yaml.v2
to unmarshal a .yaml file into a struct and couldn’t find a solution to unmarshal an url string into url.URL
.
Trying to just use url.URL fails with:
Error initializing configuration: yaml: unmarshal errors:\n line 54: cannot unmarshal !!str `http://...` into url.URL
This is because, url.URL doesn’t adhere to yaml.v2.Unmarshaler interface.
So here is my solution, feel free to copy paste it!
type YAMLURL struct { *url.URL } func (j *YAMLURL) UnmarshalYAML(unmarshal func(interface{}) error) error { var s string err := unmarshal(&s) if err != nil { return err } url, err := url.Parse(s) j.URL = url return err }
And here is how to use it:
type Config struct{ url YAMLURL `yaml:"url"` }
Thanks for reading!