ساخت باینری واحد با قالبها
استفاده از //go:embed (توصیه شده)
از Go 1.16، کتابخانه استاندارد از جاگذاری فایلها مستقیماً در باینری با دستورالعمل //go:embed پشتیبانی میکند. نیازی به وابستگیهای شخص ثالث نیست.
package main
import ( "embed" "html/template" "net/http"
"github.com/gin-gonic/gin")
//go:embed templates/*var templateFS embed.FS
func main() { router := gin.Default()
t := template.Must(template.ParseFS(templateFS, "templates/*.tmpl")) router.SetHTMLTemplate(t)
router.GET("/", func(c *gin.Context) { c.HTML(http.StatusOK, "index.tmpl", nil) })
router.Run(":8080")}استفاده از پکیج شخص ثالث
همچنین میتوانید از یک پکیج شخص ثالث مانند go-assets برای جاگذاری قالبها در باینری استفاده کنید.
func main() { router := gin.New()
t, err := loadTemplate() if err != nil { panic(err) } router.SetHTMLTemplate(t)
router.GET("/", func(c *gin.Context) { c.HTML(http.StatusOK, "/html/index.tmpl", nil) }) router.Run(":8080")}
// loadTemplate loads templates embedded by go-assets-builderfunc loadTemplate() (*template.Template, error) { t := template.New("") for name, file := range Assets.Files { if file.IsDir() || !strings.HasSuffix(name, ".tmpl") { continue } h, err := io.ReadAll(file) if err != nil { return nil, err } t, err = t.New(name).Parse(string(h)) if err != nil { return nil, err } } return t, nil}یک مثال کامل در دایرکتوری assets-in-binary/example01 ببینید.