Kadang ada kasus misal kita hanya ingin menggunakan static file sesuai dengan yang kita inginkan. Hal ini bisa kita lakukan dengan function http.ServeFile()
, dengan menggunakan function ini, kita bisa menentukan file mana yang ingin kita tulis ke http response.
package belajar_golang_web
import (
"net/http"
"testing"
)
func ServeFile(writer http.ResponseWriter, request *http.Request) {
if request.URL.Query().Get("name") != "" {
http.ServeFile(writer, request, "./resources/ok.html")
} else {
http.ServeFile(writer, request, "./resources/notfound.html")
}
}
func TestServeFileServer(t *testing.T) {
server := http.Server{
Addr: "localhost:8080",
Handler: http.HandlerFunc(ServeFile),
}
err := server.ListenAndServe()
if err != nil {
panic(err)
}
}

Golang Embed
Parameter function http.ServeFile
hanya berisi string file name, sehingga tidak bisa menggunakan golang embed. Namun bukan berarti kita tidak bisa menggunakan golang embed, karena jiak untuk melakukan load file, kita hanya butuh menggunakan package fmt dan ResponseWriter saja.
package belajar_golang_web
import (
_ "embed"
"fmt"
"net/http"
"testing"
)
//go:embed resources/ok.html
var resourceOk string
//go:embed resources/notfound.html
var resourceNotFound string
func ServeFileEmbed(writer http.ResponseWriter, request *http.Request) {
if request.URL.Query().Get("name") != "" {
fmt.Fprint(writer, resourceOk)
} else {
fmt.Fprint(writer, resourceNotFound)
}
}
func TestServeFileServerEmbed(t *testing.T) {
server := http.Server{
Addr: "localhost:8080",
Handler: http.HandlerFunc(ServeFileEmbed),
}
err := server.ListenAndServe()
if err != nil {
panic(err)
}
}

Penutup
Pada artikel kali ini kita telah belajar tentang ServeFile pada golang web. Dan pada artikel selanjutnya saya akan membahas template pada golang web.