qori.dev

Bundling Template dan Asset pada Fiber Golang

Keunggulan dari Go adalah membuat single static binary. Artinya aplikasi yang dibuat dapat dideploy dalam bentuk satu file saja.

Masalahnya file template biasanya bukan file .go sehingga normalnya tidak ikut terkompilasi dalam 1 binary. Sehingga file template dan asset lainya harus berada beriringan dengan file executable.

Dengan menggunakan magic comment go:embed (psst sebenarnya ini adalah pragma atau di Java dikenal sebagai annotation) developer dapat meng-embed file-file selain .go tanpa memerlukan library packager pihak ke-tiga. go:embed memerlukan Golang versi 1.16 ke atas.

Embed Template

Misalkan terdapat proyek MVC dengan file template di folder views. Buatlah global variable bertipe embed.Fs dengan magic comment //go:embed dan dilanjutkan dengan lokasi file/folder.

//go:embed views/*
var viewsfs embed.FS

Template Engine Fiber

engine := html.NewFileSystem(http.FS(viewsfs), ".html")

Kode di atas membuat instance template engine html dari Fiber. http.FS(viewsfs) meng-convert file system dari go:embed menjadi FileSystem dari http.

Fiber App

app := fiber.New(fiber.Config{
		Views:       engine,
		ViewsLayout: "views/main-layout",
	})

Aplikasi fiber pun dapat digunakan dan dapat dibuild menjadi satu binary.