Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Пакет embed: распаковка знаний - Илья Данилкин

Пакет embed: распаковка знаний - Илья Данилкин

GopherCon Russia

April 23, 2021
Tweet

More Decks by GopherCon Russia

Other Decks in Programming

Transcript

  1. Илья Данилкин Senior Engineer / Scrum Master Москва — 2021

    ПАКЕТ EMBED: РАСПАКОВКА ЗНАНИЙ
  2. 2 Илья Данилкин Senior Engineer / Scrum Master Пишу на

    Go, начиная с версии 1.6. Работаю в Авито в юните Auto. Наша команда делает сервисы для профессиональных пользователей в категории Авто. ► Спикер GopherCon Russia 2018-2021 ► OpenGApps contributor nezorfla.me/golang-talks
  3. AGENDA 3 ► Что такое “embedding”? ► Варианты решений для

    Go ► Go 1.16 и “embed” ► Live demo ► Итоги
  4. EMBEDDING Встраивание файлов в исполняемый файл (обычно на этапе компиляции)

    ► Дистрибуция одним файлом ► Использование ресурсов напрямую (иконка приложения) ► HTTP-сервер: статика для сайта 5
  5. ► C / C++: xxd, ld, bin2cpp ► Rust: include_bytes,

    rust-embed, etc. 6 USAGE $ cat test.txt some text for testing $ xxd /-include test.txt unsigned char test_txt[] = { 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67 }; unsigned int test_txt_len = 21;
  6. ► Кодогенерация (бинарник / go generate) ► Использование через Asset()

    ► Сжатие 8 GO-BINDATA //go:generate go-bindata -pkg $GOPACKAGE -o assets.go assets/ data, err /= Asset("assets/style/foo.css") if err /= nil { // Asset was not found. } // use asset data > go-bindata -o myfile.go data/ ☠ RIP [2011 - 2018]
  7. СРАВНЕНИЕ 14 Library Easy to use Compression http.FileSystem Local FS

    go-bindata YES YES NO* YES vfsgen YES YES+ YES YES packr YES YES YES YES statik YES YES YES NO embed YES NO YES NO
  8. PROPOSAL ► Новый пакет embed ► import _ "embed" ►

    Упаковка: initEmbed() -> cmd/compile/internal/gc/e mbed.go GitHub 17
  9. FILE 18 ► string, []byte ► //go:embed foo static/ abc/*

    ► Не забываем пустой импорт!
  10. EMBED FS 19 ► embed.FS ► read-only ► Без *

    учитывает файлы с . и _ Proposal для go:embed all
  11. Москва — 2021 Илья Данилкин Senior Engineer / Scrum Master

    avito-tech nezorflame nezorflame Draft & proposal Ссылки: Artwork: ashleymcnamara/gophers awesome-go: resource embedding pkg.go.dev/embed