Volver a la página principal
lunes 21 octubre 2024
4

Cómo usar embed en Go

El paquete embed en Go permite incluir archivos o directorios estáticos (como archivos de texto, HTML, imágenes, etc.) dentro de un binario compilado. Esto es útil para aplicaciones que necesitan acceder a archivos sin depender de su presencia en el sistema de archivos, ya que estos archivos se integran directamente en el ejecutable.

¿Qué es embed en Go?

embed es un paquete introducido en Go 1.16 que permite la inclusión de archivos en el binario compilado utilizando directivas especiales en el código. Esto es especialmente útil para aplicaciones que necesitan distribuir recursos como plantillas HTML, archivos de configuración o contenido estático.

Cómo usar embed

Para utilizar embed, debes importar el paquete y usar la directiva //go:embed seguida del nombre del archivo o directorio que quieres incrustar. Los archivos se pueden incrustar en variables de tipo string, []byte o embed.FS.

Ejemplo básico de uso de embed

Este es un ejemplo sencillo de cómo incluir un archivo de texto en tu programa Go:

package main

import (
    "embed"
    "fmt"
)

//go:embed mensaje.txt
var mensaje string

func main() {
    fmt.Println(mensaje) // Imprime el contenido del archivo mensaje.txt
}

En este ejemplo, el archivo mensaje.txt se incrusta en la variable mensaje, que es de tipo string. Al compilar y ejecutar el programa, se imprimirá el contenido de mensaje.txt sin necesidad de que el archivo esté en el sistema de archivos en tiempo de ejecución.

Incrustar múltiples archivos o directorios

También puedes incrustar múltiples archivos o incluso directorios completos utilizando comodines o listando varios archivos con la directiva //go:embed.

Ejemplo de varios archivos

//go:embed archivo1.txt archivo2.txt
var archivos embed.FS

En este caso, se pueden incluir varios archivos en la variable archivos de tipo embed.FS, lo que permite leer su contenido posteriormente en el programa.

Ejemplo de incrustar un directorio completo

//go:embed static/*
var contenidoStatic embed.FS

Este ejemplo incrusta todos los archivos dentro del directorio static. Puedes acceder a ellos usando las funciones del tipo embed.FS como ReadFile o Open.

data, _ := contenidoStatic.ReadFile("static/index.html")
fmt.Println(string(data)) // Muestra el contenido de index.html

Ejemplo práctico

Aquí tienes un ejemplo más completo que incrusta un archivo HTML y lo sirve a través de un servidor HTTP:

package main

import (
    "embed"
    "fmt"
    "net/http"
)

//go:embed index.html
var indexHTML string

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, indexHTML)
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

Este programa incrusta el archivo index.html y lo sirve a través de un servidor HTTP, lo que permite distribuir el contenido estático sin depender del sistema de archivos en tiempo de ejecución.

Referencia

Para más información sobre el uso de embed en Go, consulta la documentación oficial de Go.

Etiquetas:
go
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer