Explicación de las etiquetas Go

Cómo las etiquetas pueden agregar metainformación a las estructuras y cómo puede aprovecharlas

Las etiquetas son una forma de adjuntar información adicional a un campo de estructura.

La especificación Go en elDefinición de tipos de estructurasdefine etiquetas como

Una declaración de campo puede ir seguida de una etiqueta literal de cadena opcional, que se convierte en un atributo para todos los campos en la declaración de campo correspondiente. Una cadena de etiquetas vacía es equivalente a una etiqueta ausente. Las etiquetas se hacen visibles a través de una interfaz de reflexión y participan en la identidad de tipo para estructuras, pero de lo contrario se ignoran.

y proporciona un ejemplo:

struct {
    x, y float64 ""  // an empty tag string is like an absent tag
    name string  "any string is permitted as a tag"
    _    [4]byte "ceci n'est pas un champ de structure"
}

// A struct corresponding to a TimeStamp protocol buffer. // The tag strings define the protocol buffer field numbers; // they follow the convention outlined by the reflect package. struct { microsec uint64 protobuf:"1" serverIP6 uint64 protobuf:"2" }

Un ejemplo del mundo real

Un caso de uso común para esto es al desagrupar JSON, como explico enProcesamiento JSON con Go.

En esa publicación, el ejemplo

type Member struct {
    Age       int `json:"age,string"`
}

dicejson.Unmarshal()poner elagePropiedad JSON, astringy ponerlo en elAgecampo deMember, traduciendo a unint. En este ejemplo, pasamosjsondos informaciones, separadas por una coma.

Formato de etiquetas

Las etiquetas usan elkey:"value"formato. No es una regla estricta, sino una convención, que proporciona análisis integrado. En ese ejemplo, solo tenemos un par clave-valor, pero podríamos tener más de uno:

type Member struct {
    Age       int `json:"age,string" xml:"the_age,string"`
}

La clave por convención es el nombre del paquete al que queremos apuntar. En el ejemplo anterior,encoding/jsonyencoding/xml.

Pero las etiquetas también las podemos usar nosotros mismos en nuestras propias bibliotecas, no solo están reservadas para la biblioteca estándar.

¿Para qué se utilizan las etiquetas?

Los diferentes paquetes usan etiquetas por diferentes razones.

Los verá utilizados en la codificación de bibliotecas, como json, xml, bson, yaml, pero también en bibliotecas de base de datos / ORM, e inclusollenar una estructura con datos de formulario.

La siguiente lista fue publicada enASI QUEy es bastante completo:

Hay muchos otros usos en la naturaleza. Por ejemplomcuadros / go-defaultsuse s it para establecer valores predeterminados para campos de estructura, yasaskevich / govalidatorpermite agregar etiquetas que determinan la validación (esa es solo una forma posible de validar,existen alternativas).

fatih / gomodifytagspermite editar etiquetas en tiempo de ejecución,

Usando etiquetas en su código

Para usar etiquetas en su propio código, puede usar elreflectpaquete.

Intentemos conseguirageen una estructura miembro. El siguiente código

package main

import ( “fmt” “reflect” )

type Member struct { Age int something:"age" }

func main() { member := Member{34} t := reflect.TypeOf(member) field := t.Field(0) //field, _ := t.FieldByName(“Age”) //alternative fmt.Print(field.Tag.Get(“something”)) }

tocar

imprimiráage, gracias a la adhesión a lakey:"value"formato para nuestra etiqueta.


Más tutoriales de go: