...

/

Structs with Tags

Structs with Tags

In this lesson, we'll cover how to attach a tag with the field of a struct and how to read it.

A field in a struct can, apart from a name and a type, also optionally have a tag. It is a string (or a raw string) attached to the field, which could be documentation or some other important label. The tag-content cannot be used in normal programming; only the package reflect can access it. This package which we’ll explore deeper in the next chapter (Chapter 9), can investigate types, their properties, and methods in runtime. For example: reflect.TypeOf() on a variable gives its type. If this is a struct type, it can be indexed by Field, and then, the Tag property can be used.

The following program shows how this works:

Press + to interact
package main
import (
"fmt"
"reflect"
)
type TagType struct { // tags
field1 bool "An important answer"
field2 string `The name of the thing`
field3 int "How much there are"
}
func main() {
tt := TagType{true, "Barack Obama", 1}
for i:= 0; i < 3; i++ {
refTag(tt, i)
}
}
func refTag(tt TagType, ix int) {
ttType := reflect.TypeOf(tt)
ixField := ttType.Field(ix) // getting field at a position ix
fmt.Printf("%v\n", ixField.Tag) // printing tags
}

In the above code, at line 4, we import a package reflect. At line 7, we are making a struct TagType type variable with three fields: field1 of type bool, field2 with type string, and field3 with type int. You may have noticed with all fields, are some tags associated in quotes and backticks.

Before studying main let’s focus on the function refTag. See its header at line 20 ...