Crear etiquetas en Go

Jay Singh 30 enero 2023
  1. Crear etiquetas usando la función struct en Go
  2. Crear etiquetas usando JSON en Go
Crear etiquetas en Go

Las estructuras, también conocidas como estructuras, combinan varios bits de datos en una sola entidad. Estos conjuntos de datos definen nociones de nivel superior como una dirección, que consta de un número de casa, calle, ciudad, estado y código postal.

Puede usar etiquetas de struct para regular cómo se asigna esta información a los campos de una estructura al leerla desde sistemas como bases de datos o API. Las etiquetas Struct son fragmentos cortos de metadatos conectados a campos de una estructura y ofrecen instrucciones a otro código Go que interactúa con él.

Este es un método para agregar metadatos a su estructura. Los datos pueden ser utilizados por su paquete o una aplicación de terceros para determinar cómo realizar una acción específica o manejar los datos de manera adecuada.

Estos metadatos están separados por un espacio y declarados mediante un literal de cadena en el formato clave: valor. Existen varias etiquetas en el mismo campo, con un propósito y una biblioteca distintos.

Este tutorial demostrará cómo crear etiquetas usando la función struct de Go.

Crear etiquetas usando la función struct en Go

En este ejemplo se define un tipo User con un campo Nombre. Se ha agregado una etiqueta de struct de name a la columna Nombre.

Ejemplo 1:

package main

import "fmt"

type User struct {
    Name string `example:"name"`
}

func (u *User) String() string {
    return fmt.Sprintf("Hello, I am %s", u.Name)
}

func main() {
    u := &User{
    Name: "Jay Singh",
    }

    fmt.Println(u)
}

Producción :

Hello, I am Jay Singh

Deberá usar el paquete reflect para acceder y usar las etiquetas.

Si se utiliza el formato tradicional, podemos utilizar los métodos Get y Lookup de StructTag para acceder a la información sobre la etiqueta. El método Buscar también devuelve el valor ok, indicando si se encontró la etiqueta en el campo.

Ejemplo 2:

package main

import (
    "fmt"
    "reflect"
)

type User struct {
    Name  string `color:"white"`
    Age   int    `color:"black"`
    Email string
}

func main() {
    a := User{"Jay", 99, "example@jay.com"}

    ut := reflect.TypeOf(a)
    for i := 0; i < ut.NumField(); i++ {
        field := ut.Field(i)
        if color, ok := field.Tag.Lookup("color"); ok {
            if color == "" {
                fmt.Println("(blank)")
            } else {
                fmt.Println(color)
            }
        } else {
            fmt.Println("(Not Specified)")
        }
    }
}

Producción :

white
black
(Not Specified)

Crear etiquetas usando JSON en Go

El codificador JSON de la biblioteca estándar usa etiquetas struct como anotaciones para decirle al codificador cómo desea nombrar sus campos en la salida JSON. El paquete encoding/json contiene estos mecanismos de codificación y decodificación JSON.

Para comprender cómo se codifica JSON sin etiquetas struct, prueba este ejemplo:

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "os"
    "time"
)

type User struct {
    Name      string
    Password  string
    Address   []string
    CreatedAt time.Time
}

func main() {
    a := &User{
    Name:      "Jay Singh",
    Password:  "qwertyuiop",
    CreatedAt: time.Now(),
    }

    out, err := json.MarshalIndent(a, "", "  ")
    if err != nil {
        log.Println(err)
        os.Exit(1)
    }

    fmt.Println(string(out))
}

Producción :

{
    "Name": "Jay Singh",
    "Password": "qwertyuiop",
    "Address": null,
    "CreatedAt": "2022-03-10T23:00:00Z"
}