From 720d8c5e1267598d9e695f9aaac04a9238ec11cf Mon Sep 17 00:00:00 2001 From: ahmad alfandi Date: Tue, 15 Jul 2025 15:58:35 +0700 Subject: [PATCH] chore: menambahkan penjelasan tentang embed package --- utilities/embed/README.md | 78 ++++++++++++++++++++++++++ utilities/embed/embed.go | 39 +++++++++++++ utilities/embed/folder/file1.hash | 1 + utilities/embed/folder/file2.hash | 1 + utilities/embed/folder/single_file.txt | 1 + 5 files changed, 120 insertions(+) create mode 100644 utilities/embed/README.md create mode 100644 utilities/embed/embed.go create mode 100644 utilities/embed/folder/file1.hash create mode 100644 utilities/embed/folder/file2.hash create mode 100644 utilities/embed/folder/single_file.txt diff --git a/utilities/embed/README.md b/utilities/embed/README.md new file mode 100644 index 0000000..a030fca --- /dev/null +++ b/utilities/embed/README.md @@ -0,0 +1,78 @@ +## Embed + +`embed` adalah standard library bawaan Go yang digunakan untuk menyisipkan file atau folder statis (seperti teks, gambar, konfigurasi, dll) langsung ke dalam binary Go saat compile time. Ini sangat berguna untuk menyertakan file seperti template HTML, konfigurasi, skrip, atau file lain yang dibutuhkan aplikasi tanpa harus membaca dari sistem file saat runtime. + +Library `embed` mendukung penyisipan: + +- File tunggal sebagai `string` atau `[]byte` +- Folder beserta isinya sebagai `embed.FS` (filesystem virtual) + +### Tujuan + +- Menyertakan file seperti template HTML, konfigurasi, aset, dll. +- Membuat aplikasi mandiri tanpa ketergantungan luar +- Meningkatkan performa dengan menghindari pembacaan dari disk saat runtime + +### Contoh Kasus + +#### Variabel Tunggal + +Membaca isi file single_file.txt sebagai string + +```go +//go:embed folder/single_file.txt +var fileString string +``` + +Membaca isi file single_file.txt sebagai slice of byte. + +```go +//go:embed folder/single_file.txt +var fileByte []byte +``` + +#### Folder dan Multiple File + +Membaca file single_file.txt dan semua file dengan ekstensi .hash dalam folder folder/ sebagai filesystem virtual. + +```go +//go:embed folder/single_file.txt +//go:embed folder/\*.hash +var folder embed.FS +``` + +### Contoh Implementasi + +```go +package main + +import ( + "embed" +) + +//go:embed folder/single_file.txt +var fileString string + +//go:embed folder/single_file.txt +var fileByte []byte + +//go:embed folder/single_file.txt +//go:embed folder/*.hash +var folder embed.FS + +func main() { + // Mencetak isi fileString + println(fileString) + + // Mencetak isi fileByte sebagai string + println(string(fileByte)) + + // Membaca file1.hash dari folder + content1, _ := folder.ReadFile("folder/file1.hash") + println(string(content1)) + + // Membaca file2.hash dari folder + content2, _ := folder.ReadFile("folder/file2.hash") + println(string(content2)) +} +``` diff --git a/utilities/embed/embed.go b/utilities/embed/embed.go new file mode 100644 index 0000000..1b5755d --- /dev/null +++ b/utilities/embed/embed.go @@ -0,0 +1,39 @@ +package main + +import ( + "embed" +) + +// Variabel fileString menyimpan isi dari file single_file.txt sebagai string +// value dari variabel fileString adalah teks/plain dari file tersebut +// +//go:embed folder/single_file.txt +var fileString string + +// Variabel fileByte menyimpan isi dari file single_file.txt sebagai []byte (slice of byte) +// Berguna saat kamu membutuhkan data biner seperti untuk operasi hashing, enkripsi, dll. +// +//go:embed folder/single_file.txt +var fileByte []byte + +// Variabel folder menyimpan sistem berkas virtual dari beberapa file +// Tipe embed.FS memungkinkan kita membaca banyak file seperti filesystem biasa +// +//go:embed folder/single_file.txt +//go:embed folder/*.hash +var folder embed.FS + +func main() { + // mencetak isi dari fileString + print(fileString) + // mencetak isi dari fileByte sebagai string + print(string(fileByte)) + + // Membaca file1.hash dari folder + content1, _ := folder.ReadFile("folder/file1.hash") + print(string(content1)) + + // Membaca file2.hash dari folder + content2, _ := folder.ReadFile("folder/file2.hash") + print(string(content2)) +} diff --git a/utilities/embed/folder/file1.hash b/utilities/embed/folder/file1.hash new file mode 100644 index 0000000..b79c976 --- /dev/null +++ b/utilities/embed/folder/file1.hash @@ -0,0 +1 @@ +hash diff --git a/utilities/embed/folder/file2.hash b/utilities/embed/folder/file2.hash new file mode 100644 index 0000000..cce4a2f --- /dev/null +++ b/utilities/embed/folder/file2.hash @@ -0,0 +1 @@ +hash2 diff --git a/utilities/embed/folder/single_file.txt b/utilities/embed/folder/single_file.txt new file mode 100644 index 0000000..57a439b --- /dev/null +++ b/utilities/embed/folder/single_file.txt @@ -0,0 +1 @@ +Bellshade golang repository