Skip to content

Embed

Go da embed 1.16 versiyasidan boshlab qo'shilgan imkoniyat bo'lib, fayllarni yoki butun kataloglarni binary ichiga joylashtirib, dastur kompilyatsiya qilingandan keyin ham ularni ichidan o'qishga imkon beradi. Bu HTML, CSS, JS, config yoki boshqa resurslarni alohida fayl sifatida saqlab yurmasdan ichiga qo'shib yuborishga juda qulay.

Faylni embed qilish

Masalan, fayl.txt fayl:

fayl.txt
Salom, dunyo!

Kod:

package main

import (
    _ "embed"
    "fmt"
)

//go:embed hello.txt
var hello string

func main() {
    fmt.Println(hello)
}
  • //go:embed hello.txt bu maxsus compiler directive.
  • var hello string o'zgaruvchiga, fayl ichidagi matn string sifatida joylashtiriladi.

Faylni []byte sifatida embed qilish

package main

import (
    _ "embed"
)

//go:embed logo.png
var logoBytes []byte // Fayl to'g'ridan-to'g'ri bayt ko'rinishida saqlanadi

func main() {

}

Butun katalogni embed qilish

Bir nechta .txt faylni embed qilishning eng yaxshi usuli embed.FS ishlatish. Shunda barcha fayllar bitta o'zgaruvchida turadi va keraklisini nomi bo'yicha o'qib olasan.

Katalog tuzilishi

.
├── main.go
└── texts
    ├── file1.txt
    ├── file2.txt
    └── file3.txt
package main

import (
    "embed"
    "fmt"
    "io/fs"
)

//go:embed texts/*
var txtFiles embed.FS

func main() {
    fs.WalkDir(txtFiles, "texts", func(path string, d fs.DirEntry, err error) error {
        if err != nil {
            return err
        }

        if !d.IsDir() {
            data, _ := txtFiles.ReadFile(path) // []byte sifatida o'qiladi
            fmt.Printf("=== %s ===\n%s\n\n", path, string(data))
        }
        return nil
    })
}