Una etiqueta (tag) es útil para adjuntar meta-información al campo o la propiedad con la que deseamos realizar mapeos mediante la reflexión. Usualmente son utilizados para proporcionar información de transformación acerca de como codificar o decodificar una propiedad de una estructura desde otro formato (por ejemplo almacenar o recuperarla desde de una base de datos), pero también puede ser utilizada para almacenar cualquier meta-información que deseemos, especialmente cuando trabajemos con Formatos JSON.
Veamos un ejemplo:
package main import ( "fmt" "reflect" ) type Jugador struct { Nombre string `mitag:"MiNombre"` Email string `mitag:"MiEmail"` } func main() { delantero := Jugador{"Messi", "messi@psg.com"} delanteroType := reflect.TypeOf(delantero) for _, nombreCampo := range []string{"Nombre", "Email"} { campo, encontrado := delanteroType.FieldByName(nombreCampo) if !encontrado { continue } fmt.Printf("\nCampo: Jugador.%s\n", nombreCampo) fmt.Printf("\tValor completo del tag : %q\n", campo.Tag) fmt.Printf("\tValor de 'mitag': %q\n", campo.Tag.Get("mitag")) } }
Como podemos observar haciendo uso del paquete reflect podemos hacer reflexion del objeto delantero y podemos extrare el tag completo y el valor correspondiente a cada tag.