Pengertian Serve File
Pada materi
Membuat Web Golang. Maka pada Router pun sudah mendukung serve static file menggunakan fungsi ServeFiles(Path, FileSystem)
yang mana pada Path
kita harus menggunakan Catch All Parameters. Sedangkan pada FileSystem
bisa melakukan manual load dari folder atau menggunakan golang Embed seperti yang pernah kita bahas di materi sebelumnya.
Berbeda dengan kita membuat handler, untuk membuat serve file kita perlu membuat path directory terlebih dahulu agar bisa terbaca oleh sistem dengan menambahkan kode dibawah ini pada file main.go
.
directory, _ := fs.Sub(resources, "resources")
Baca folder menggunakan embeded dengan membuat variabel global yang nantinya bisa dipakai di semua projek.
//go:embed resources
var resources embed.FS
Lalu kita tambahkan router path dimana folder dan file yang bisa dibaca oleh router.
router.ServeFiles("/files/*filepath", http.FS(directory))
Pasitkan juga pada folder tersebut ada file yang terisi karena kita menggunakan go:embed
maka ada validasi dari Golang kalau folder tersebut kosong maka program tidak akan jalan.
Jika kamu ingin melihat keseluruhan kode pada file main.go
akan seperti dibawah ini.
package main
import (
"embed"
"io/fs"
"net/http"
"github.com/julienschmidt/httprouter"
)
//go:embed resources
var resources embed.FS
func main() {
router := httprouter.New()
directory, _ := fs.Sub(resources, "resources")
router.GET("/", SampleGetHandler)
router.POST("/", SamplePostHandler)
router.GET("/product/:id", GetUsedParamsHandler)
router.GET("/product/:id/items/:itemId", NamedParameterHandler)
router.GET("/images/*image", CatchAllParameterHandler)
router.ServeFiles("/files/*filepath", http.FS(directory))
server := http.Server{
Handler: router,
Addr: "localhost:8080",
}
server.ListenAndServe()
}
Kita akan mencoba melakukan pengetesan dengan menggunakan cURL. Pastikan file pada folder yang dituju oleh router tersedia file-nya agar bisa terbuka datanya.
curl --location --request GET 'http://localhost:8080/files/hello.txt'
Maka jika dieksekusi cURL tersebut akan terlihat hasil seperti ini.
➜ santekno-hugo git:(main) ✗ curl --location --request GET 'http://localhost:8080/files/hello.txt'
Halo Santekno%
03 Mempelajari Route Pattern
05 Mempelajari Panic Handler
Artikel Terhangat
50 Role-based Authorization di GraphQL
08 Aug 2025
72. Generate Swagger/OpenAPI dari Protobuf
08 Aug 2025
49 Autentikasi Resolver Berdasarkan Context
08 Aug 2025
48 Menyimpan dan Mengecek Token JWT
08 Aug 2025
Rental Mobil Kapasitas 7 Seat Bandung Murah
08 Aug 2025
47 Membuat Mutation Login dan Signup
08 Aug 2025

50 Role-based Authorization di GraphQL

72. Generate Swagger/OpenAPI dari Protobuf

49 Autentikasi Resolver Berdasarkan Context

48 Menyimpan dan Mengecek Token JWT

Rental Mobil Kapasitas 7 Seat Bandung Murah
