Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 78 additions & 0 deletions utilities/embed/README.md
Original file line number Diff line number Diff line change
@@ -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))
}
```
39 changes: 39 additions & 0 deletions utilities/embed/embed.go
Original file line number Diff line number Diff line change
@@ -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))
}
1 change: 1 addition & 0 deletions utilities/embed/folder/file1.hash
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
hash
1 change: 1 addition & 0 deletions utilities/embed/folder/file2.hash
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
hash2
1 change: 1 addition & 0 deletions utilities/embed/folder/single_file.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Bellshade golang repository