| package structs |
| |
| import "strings" |
| |
| // tagOptions contains a slice of tag options |
| type tagOptions []string |
| |
| // Has returns true if the given option is available in tagOptions |
| func (t tagOptions) Has(opt string) bool { |
| for _, tagOpt := range t { |
| if tagOpt == opt { |
| return true |
| } |
| } |
| |
| return false |
| } |
| |
| // parseTag splits a struct field's tag into its name and a list of options |
| // which comes after a name. A tag is in the form of: "name,option1,option2". |
| // The name can be neglectected. |
| func parseTag(tag string) (string, tagOptions) { |
| // tag is one of followings: |
| // "" |
| // "name" |
| // "name,opt" |
| // "name,opt,opt2" |
| // ",opt" |
| |
| res := strings.Split(tag, ",") |
| return res[0], res[1:] |
| } |