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