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"
}