|
| 1 | +## Embed |
| 2 | + |
| 3 | +`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. |
| 4 | + |
| 5 | +Library `embed` mendukung penyisipan: |
| 6 | + |
| 7 | +- File tunggal sebagai `string` atau `[]byte` |
| 8 | +- Folder beserta isinya sebagai `embed.FS` (filesystem virtual) |
| 9 | + |
| 10 | +### Tujuan |
| 11 | + |
| 12 | +- Menyertakan file seperti template HTML, konfigurasi, aset, dll. |
| 13 | +- Membuat aplikasi mandiri tanpa ketergantungan luar |
| 14 | +- Meningkatkan performa dengan menghindari pembacaan dari disk saat runtime |
| 15 | + |
| 16 | +### Contoh Kasus |
| 17 | + |
| 18 | +#### Variabel Tunggal |
| 19 | + |
| 20 | +Membaca isi file single_file.txt sebagai string |
| 21 | + |
| 22 | +```go |
| 23 | +//go:embed folder/single_file.txt |
| 24 | +var fileString string |
| 25 | +``` |
| 26 | + |
| 27 | +Membaca isi file single_file.txt sebagai slice of byte. |
| 28 | + |
| 29 | +```go |
| 30 | +//go:embed folder/single_file.txt |
| 31 | +var fileByte []byte |
| 32 | +``` |
| 33 | + |
| 34 | +#### Folder dan Multiple File |
| 35 | + |
| 36 | +Membaca file single_file.txt dan semua file dengan ekstensi .hash dalam folder folder/ sebagai filesystem virtual. |
| 37 | + |
| 38 | +```go |
| 39 | +//go:embed folder/single_file.txt |
| 40 | +//go:embed folder/\*.hash |
| 41 | +var folder embed.FS |
| 42 | +``` |
| 43 | + |
| 44 | +### Contoh Implementasi |
| 45 | + |
| 46 | +```go |
| 47 | +package main |
| 48 | + |
| 49 | +import ( |
| 50 | + "embed" |
| 51 | +) |
| 52 | + |
| 53 | +//go:embed folder/single_file.txt |
| 54 | +var fileString string |
| 55 | + |
| 56 | +//go:embed folder/single_file.txt |
| 57 | +var fileByte []byte |
| 58 | + |
| 59 | +//go:embed folder/single_file.txt |
| 60 | +//go:embed folder/*.hash |
| 61 | +var folder embed.FS |
| 62 | + |
| 63 | +func main() { |
| 64 | + // Mencetak isi fileString |
| 65 | + println(fileString) |
| 66 | + |
| 67 | + // Mencetak isi fileByte sebagai string |
| 68 | + println(string(fileByte)) |
| 69 | + |
| 70 | + // Membaca file1.hash dari folder |
| 71 | + content1, _ := folder.ReadFile("folder/file1.hash") |
| 72 | + println(string(content1)) |
| 73 | + |
| 74 | + // Membaca file2.hash dari folder |
| 75 | + content2, _ := folder.ReadFile("folder/file2.hash") |
| 76 | + println(string(content2)) |
| 77 | +} |
| 78 | +``` |
0 commit comments