💬Для чего в Go предназначена директива "//go:embed"?



📌Начиная с Go 1.16, директива //go:embed представляет собой специальный комментарий, который используется для встраивания файлов и директорий непосредственно в скомпилированный бинарный файл Go.



📌Во время выполнения, эти ресурсы становятся доступны через переменную, к которой применяется директива. Нам не нужно заботиться о механизмах пути к файлу или открытии и чтении файлов во время выполнения, что упрощает распространение программ, требующих доступа к внешним файлам.



Простой пример:





package main



import (

"embed"

"io/fs"

"net/http"

)



//go:embed static/*

var staticFiles embed.FS



func main() {

// Используем встроенные файлы напрямую

http.Handle("/", http.FileServer(http.FS(staticFiles)))

http.ListenAndServe(":8080", nil)

}





Все файлы в директории static встраиваются в бинарный файл. Директива //go:embed должна быть расположена непосредственно перед объявлением переменной без пустых строк между комментарием и объявлением. Это позволяет использовать staticFiles как файловую систему внутри Go-кода.



Этот функционал особенно полезен, когда мы хотим создать самодостаточное приложение, которое не зависит от внешних файлов во время выполнения.



👉 Подробнее