Go by Example: Embed Directive

//go:embed bu kompilyator direktivasi bo’lib, dasturlarga build vaqtida Go binar fayliga ixtiyoriy fayllar va papkalarni kiritish imkonini beradi. Embed direktivasi haqida ko’proq bu yerda o’qing.

package main

embed paketini import qilamiz; agar bu paketdan hech qanday eksport qilingan identifikatordan foydalanmasangiz, _ "embed" bilan bo’sh import qilishingiz mumkin.

import (
    "embed"
)

embed direktivalari Go manba faylini o’z ichiga olgan katalogga nisbatan yo’llarni qabul qiladi. Bu direktiva faylning tarkibini undan keyin darhol keladigan string o’zgaruvchisiga joylashtiradi.

//go:embed folder/single_file.txt
var fileString string

Yoki faylning tarkibini []byte ga joylashtiramiz.

//go:embed folder/single_file.txt
var fileByte []byte

Biz wildcard’lar bilan bir nechta fayl yoki hatto papkalarni ham joylashtirishimiz mumkin. Bu oddiy virtual fayl tizimini amalga oshiradigan embed.FS tipi o’zgaruvchisidan foydalanadi.

//go:embed folder/single_file.txt
//go:embed folder/*.hash
var folder embed.FS
func main() {

single_file.txt tarkibini chop etamiz.

    print(fileString)
    print(string(fileByte))

Joylashtirilgan papkadan bir nechta faylni olamiz.

    content1, _ := folder.ReadFile("folder/file1.hash")
    print(string(content1))
    content2, _ := folder.ReadFile("folder/file2.hash")
    print(string(content2))
}

Misolni ishga tushirish uchun ushbu buyruqlardan foydalaning. (Eslatma: go playground’dagi cheklov tufayli bu misolni faqat o’z lokal mashinangizda ishga tushirish mumkin.)

$ mkdir -p folder
$ echo "hello go" > folder/single_file.txt
$ echo "123" > folder/file1.hash
$ echo "456" > folder/file2.hash
$ go run embed-directive.go
hello go
hello go
123
456

Keyingi misol: .