Parse and modify Go struct field tags
Switch branches/tags
Clone or download
fatih Merge pull request #1 from hchargois/master
Add Value() to Tag, returning raw value (name+options)
Latest commit 76ae1d6 Aug 7, 2018

structtag GoDoc Build Status

structtag provides an easy way of parsing and manipulating struct tag fields. Please vendor the library as it might change in future versions.


go get


package main

import (


func main() {
	type t struct {
		t string `json:"foo,omitempty,string" xml:"foo"`

	// get field tag
	tag := reflect.TypeOf(t{}).Field(0).Tag

	// ... and start using structtag by parsing the tag
	tags, err := structtag.Parse(string(tag))
	if err != nil {

	// iterate over all tags
	for _, t := range tags.Tags() {
		fmt.Printf("tag: %+v\n", t)

	// get a single tag
	jsonTag, err := tags.Get("json")
	if err != nil {
	fmt.Println(jsonTag)         // Output: json:"foo,omitempty,string"
	fmt.Println(jsonTag.Key)     // Output: json
	fmt.Println(jsonTag.Name)    // Output: foo
	fmt.Println(jsonTag.Options) // Output: [omitempty string]

	// change existing tag
	jsonTag.Name = "foo_bar"
	jsonTag.Options = nil

	// add new tag
		Key:     "hcl",
		Name:    "foo",
		Options: []string{"squash"},

	// print the tags
	fmt.Println(tags) // Output: json:"foo_bar" xml:"foo" hcl:"foo,squash"

	// sort tags according to keys
	fmt.Println(tags) // Output: hcl:"foo,squash" json:"foo_bar" xml:"foo"