TRABAJAR CON FICHEROS ESTáTICOS NUNCA ES TAREA SENCILLA Y MENOS EN Go Ya Que No Teníamos Soporte Nativo Para Ellos y Teníamos que Tirar de litererías de Terceros. Con La Release de Перейти 1.16 Эсто Камбио. Y Cambió Para Bien, Ya Que Incluye ООН Нуэво Пакеете Ламадо встроить Que de Forma Nativa Nos Ayuda Trabajar Con Los Ficheros Estáticos.
EN La Documentaciónfiblefial del Paquete (ссылка перед апереценом varios ejemplos de uso de dicha libería:
- Urrustando Un Fichero Como
нить
- Urrustando Un Fichero Como
[] байт
- resvastando un fichero como el tipo propio de la librisería
встраивать. Фшс
Los Dos Primeros Casos Son Muy Smple Y Con Los Ejemplos de Dicho Artículo Se Entenden Perfectemente. POR DAR UN POCO Más de Ejemplos (SIN Código) ОС Pueho Decir Que el Caso de Строка
Podria Ser Válido Cuando Queremos Cargar Algún Valor de Configuración «Простое» Partir de un un fichero externo. RU VEZ DE TIRAR DE UNA VARAR DE Entorno, Podriamos Teaser OUT Fichero de Confign Enes Ense Valor (без чувствительности POR Supuesto) Y Cargar Dicho Fichero Con La Librityía Para Errrastar Ese Valor.
Si Quisiéramos Hacer Lo Mismo Pero Con Más de un Valor (Más de un un String
) Tendríamos que Usar El Otro Tipo, [] байт
Отказ De esta forma podriamos teaser por ejemplo uns .yaml
(Adoramos Yaml ¿нет?) Con Nuestra Configuración Para La Applicación E Ersustarlo En Nuestra Appleación Como Array de bytes y Cargar Todos Los Valores de Golpe. LUEGO CON HACER ООН ПОЛЬЗОВАТЕЛЬНЫЙ Тип (und struct mismo) y hacerle monmarhall del [] байт
Noestro Type Nos Serviría Sin Procements.
El Tercer Tipo de Dato Para Mí Es El Más Interesante De Comentar Y Por Eso Escribo Este. Si Alguna Vez У Montado Una Página Web, Sabrás Que Se Compone de Varios Ficheros … ¡Ajá! Estáticos. Para eello en go tenemos el paquete HTML/шаблон
El Cual Necesita Cargar En Memoria Las Plantillas de Las Páginas Que queremos Montar.
Llegados aste este punto te podrías preguntar, ¿por Qué es tedioso trabajar con estáticos? o También ¿en Qué momento es todo esto útil? Пуис Ахора МИММО Лё Вой explicaar. Imagina Que Nuestro Program Programa Necesita Leer un Fichero, E El Ejemplo Ansiory La Plostilla HTML. ESTA Plostilla Tendrá Una Ubicación, УПРАВЛЕНИЕ ООН ЭН EL CAUAT ESTA ALMACENADA. Esta Ubicación Será Válida Mientras Nuestro Código SE Compile E EL Directorio Actional. En al momento que hagamos un Go Build
y el binario lo movamos atro destino, esa lectura nos VA GALLAR PORQUÉ NO VA Encontrar La Ruta Especificada. Para Resolver Este Flancea Essee El Paqeete встроить
Отказ
Vamos a un poco de Código Para Este Caso. Primero de ToDo Miramos La Documentación Y Vemos Qué Campos Tiene El Tipo que nos interesa встраивать. ФС
y Qué Métodos Nos ofrece. VEMO que No Hay Campos Pero Sí Tres Métodos Parabrir Un Fichero, Leer Un Fichero Y Leer Un Directorio Y Que Éstos devualven un FS. Файл
, ООН [] байт
у ООН [] ФС. Дирентри
ОБЕСПЕЧЕНИЕ ADEMAS DEL CLASICO Ошибка CADA UNO.
Ya Que queremos Montar Una Web, Vamos a ver el paquete inseormente comentado Qué Métodos Nos que que estén relacionados con los tres tipos que podemos obtener del paquete встраивать. ФС
Отказ WEMO que Hay un Método Parsefs () Que Parece El Adecuado Я. que Очистить ООН FS. ФС
у ООН Строка ...
Con Los Directorios de Donde Vamos Cargar Dicho Fichero.
TENIEDION EN CUETA QUE LAS POLTIENLAS LAS PODEMOS TENER STOMPLE O TIRANDO DE MALEOUTS, VAMOS A VER EL CASO Más Cellous As Es Cuando USAMOS PARA DEACTIR La Pantalla Queeremos Pintar Y Ejecutar Dicho Layout En Nuestras Plantillas.
Ejemplo Construyendo Una Página Web
PARA HACER ESTE EJEMPLO CREAREMOS LA SIGUIETE EXTRUCTURE DE CARPETAS Y FICHEROS:
|- templates/ |- templates/ |- layouts/ |- main.go
Nuestra Главная макет Podria Ser Algo Parecido Al Siguiente Bloque Como layout.tmpl.tmpl.
:
{{define "main"}}Testing embed {{template "content" .}}{{end}}
Освеченные Эсто-СЕ СЕДЕ СДЕЛАТЬ ОБЛАСТЬ TANTO COMO Сдеев Y Necesites. Para El Ejemplo que quiero Mastrar No Hace Falta Combricarlo Más.
La Template Podria Ser La Siguiente Como user_profile.tmpl
.:
{{template "main" .}} {{define "content"}}{{end}}User
{{.Name }}
Email: {{.Email }}
Address: {{.Address }}
Phone number: {{.PhoneNumber }}
Como Veis Es Algo Muy Simple También Para Masterar Información de Un Usuario Muy Básico. Подриа Сер-ла-Пагина дельфуфль де ООН УСУАРИО.
Una Vez TeneMos Tanto El Layout Como La Шаблон, TeneMos que Picar Nuestro Cóestigo En Go Para Cargar Dichas Información. Para Ello Crowsos La Función A Continuación En Nuestro main.go
Отказ
package main import ( "embed" "fmt" "html/template" "io" "io/fs" ) const ( layoutsDir = "templates/layouts" templatesDir = "templates" extension = "/*.html" ) var ( //go:embed templates/* templates/layouts/* files embed.FS templates map[string]*template.Template ) func LoadTemplates() error { if templates == nil { templates = make(map[string]*template.Template) } tmplFiles, err := fs.ReadDir(files, templatesDir) if err != nil { return err } for _, tmpl := range tmplFiles { if tmpl.IsDir() { continue } pt, err := template.ParseFS(files, templatesDir+"/"+tmpl.Name(), layoutsDir+extension) if err != nil { return err } templates[tmpl.Name()] = pt } return nil }
Lo Interesante Aquí es ver como dogimos la parte de las Переменные:
//go:embed templates/* templates/layouts/* files embed.FS
CON ESTO LE INDICAMOS AL CompIlador Que Busque Dentro de Шаблоны Y de Шаблоны/макеты Los Archivos Y Los Cargue Ru Variable Файлы
Отказ Luego En Nuestra Función de Cargar Plowingillas Simplemente Enaclyizamos un Mapa Donde Guardamos El Nombre de la Plostilla Y El Valor de stasta. Таль COMO Comenté Antes, Usamos El Paquete фшс
PARA LEER LOS FICHEROS CARGADOS CON EL PAQUETE встраиваться
Y luego ya los podemos ejecutar con la función que vimos de Parsefs
Отказ
Ahora Que Ya TeneMos Nuestras Plantillas Cargadas Es Hora de Exponerlas. PARA ELLO LEVANTAREMOS SERVER SERVER HTTP SENCILLITO PARA QUE VEA VEA COMO ACCEDER A Nuestras Plowingillas. Primero de ToDo Crowsos Nuestro Handler. El Siguiente Bloque Puede Estar El Mismo main.go
o en un fichero diferente. Зависимое дель Caso Las Llmadas A a La Función Para Renderizar LAS Шаблоны Y Algunas Переменные Deberán Modififarse.
const userProfile = "userProfile.tmpl" func UserProfile(w http.ResponseWriter, r *http.Request) { t, ok := templates[userProfile] if !ok { // TODO handle error return } data := make(map[string]interface{}) data["Name"] = "John Doe" data["Email"] = "johndoe@email.com" data["Address"] = "Fake Street, 123" data["PhoneNumber"] = "654123987" if err := t.Execute(w, data); err != nil { // TODO handle error } }
Финализация Añadimos Nuestra Función Главная ()
En El Fichero main.go
:
func main() { r := http.NewServeMux() r.HandleFunc("/user-profile", UserProfile) if err := http.ListenAndServe(":8080", r); err != nil { // TODO handle error } }
Заключение
Con ToDo Esto Espero que Trabajar Con Los Ficheros Estáticos TE Recho To Mas Sencillo Y Práctico que Antes. Si Hey Alguna Parte que No Ha Quedado del Todo Clara o Hay Partes que no he cubierto que te gustaría que lo hiciera, dejame un comentario aquí mismo o por mis redes socies que tienes en mi perfil y estaré encantado de revonder.
Оригинал: «https://dev.to/charly3pins/aprende-a-utilizar-el-paquete-embed-a-go-construyendo-una-pagina-web-facilmente-52n1»