Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Пакет embed: распаковка знаний - Илья Данилкин
Search
GopherCon Russia
April 23, 2021
Programming
300
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Пакет embed: распаковка знаний - Илья Данилкин
GopherCon Russia
April 23, 2021
More Decks by GopherCon Russia
See All by GopherCon Russia
Go Profiling from Bottom Up - Felix Geisendörfer
gopherconrussia
0
260
Learning Unsung Gotchas of Go - Rashmi Nagpal
gopherconrussia
1
310
Прозрачный gRPC-proxy один-ко-многим - Андрей Смирнов
gopherconrussia
0
180
Из Python в Go и обратно - Андрей Минкин
gopherconrussia
0
190
Оптимизация работы с PostgreSQL в Go: от 50 до 5000 RPS - Иван Осадчий
gopherconrussia
0
220
За пару мгновений до main() - Олег Ковалев
gopherconrussia
0
180
Тестирование в Go c Ginkgo и Gomega - Александр Егурнов
gopherconrussia
0
160
Building an Autoscaling HTTP Proxy for Kubernetes - Aaron Schlesinger
gopherconrussia
0
160
Designing Pluggable Idiomatic Go Applications – Mark Bates
gopherconrussia
0
85
Other Decks in Programming
See All in Programming
Foundry Localでエージェント開発
seosoft
0
110
Oxlintはいいぞ(続)
yug1224
1
530
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
520
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
650
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
200
How I Won Prize Money at a Hackathon Using Codex and Symphony Alpha
yasei_no_otoko
0
140
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
PyO3 で既存 Python 評価器を Rust core 化する ー wasm-bindgen でブラウザにも配るための設計
kdash
1
310
Webエンジニアなのにブラウザの仕組みがわからないので、Pythonで自作してみた
tatsuki12
4
1.6k
PHPプロジェクトの結合バランスを可視化する #php_night
kajitack
0
200
AWS Transform Customによる Spring Boot 2.xから4.xへのVerUp
satoshi256kbyte
2
130
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
250
Featured
See All Featured
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Mind Mapping
helmedeiros
PRO
1
340
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
How to Think Like a Performance Engineer
csswizardry
28
2.8k
Chasing Engaging Ingredients in Design
codingconduct
0
300
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
410
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
510
Paper Plane
katiecoart
PRO
2
53k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
260
GitHub's CSS Performance
jonrohan
1033
470k
ラッコキーワード サービス紹介資料
rakko
1
4.7M
Transcript
Илья Данилкин Senior Engineer / Scrum Master Москва — 2021
ПАКЕТ EMBED: РАСПАКОВКА ЗНАНИЙ
2 Илья Данилкин Senior Engineer / Scrum Master Пишу на
Go, начиная с версии 1.6. Работаю в Авито в юните Auto. Наша команда делает сервисы для профессиональных пользователей в категории Авто. ► Спикер GopherCon Russia 2018-2021 ► OpenGApps contributor nezorfla.me/golang-talks
AGENDA 3 ► Что такое “embedding”? ► Варианты решений для
Go ► Go 1.16 и “embed” ► Live demo ► Итоги
ЧТО ТАКОЕ EMBEDDING? ПАКЕТ EMBED: РАСПАКОВКА ЗНАНИЙ 4
EMBEDDING Встраивание файлов в исполняемый файл (обычно на этапе компиляции)
► Дистрибуция одним файлом ► Использование ресурсов напрямую (иконка приложения) ► HTTP-сервер: статика для сайта 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;
ВАРИАНТЫ РЕШЕНИЙ ДЛЯ GO ПАКЕТ EMBED: РАСПАКОВКА ЗНАНИЙ 7
► Кодогенерация (бинарник / 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]
АЛЬТЕРНАТИВЫ ► shurcooL/vfsgen ► rakyll/statik ► gobuffalo/packr ► GeertJohan/go.rice 9
КЛЮЧЕВЫЕ ФИЧИ 10 Ease of use 01.
КЛЮЧЕВЫЕ ФИЧИ 11 Ease of use 01. Архивация 02.
КЛЮЧЕВЫЕ ФИЧИ 12 Ease of use 01. Архивация 02. http.FileSystem
03.
КЛЮЧЕВЫЕ ФИЧИ 13 Easy to use 01. Архивация 02. http.FileSystem
03. Local FS 04.
СРАВНЕНИЕ 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
GO 1.16 И “EMBED” ПАКЕТ EMBED: РАСПАКОВКА ЗНАНИЙ 15
DRAFT Design: https://golang.org/s/draft-embe d-design ► By Russ Cox, Brad Fitzpatrick
► Reddit, video ► Прототип 16
PROPOSAL ► Новый пакет embed ► import _ "embed" ►
Упаковка: initEmbed() -> cmd/compile/internal/gc/e mbed.go GitHub 17
FILE 18 ► string, []byte ► //go:embed foo static/ abc/*
► Не забываем пустой импорт!
EMBED FS 19 ► embed.FS ► read-only ► Без *
учитывает файлы с . и _ Proposal для go:embed all
HTTP STATIC 20 ► http.FileSystem ► http/template ► Не путать
с text/tempalte!
COMMUNITY 21 ► embed-encrypt - AES-шифрование More coming soon? 😉
LIVE DEMO ПАКЕТ EMBED: РАСПАКОВКА ЗНАНИЙ 22
23 LIVE DEMO пакет embed: распаковка знаний
ИТОГИ ПАКЕТ EMBED: РАСПАКОВКА ЗНАНИЙ 24
ИТОГИ 25 Простое barebones - решение 01.
ИТОГИ 26 Простое barebones - решение 01. Альтернативы для большего
кол-ва фич 02.
ИТОГИ 27 Простое barebones - решение 01. Альтернативы для большего
кол-ва фич 02. Power of community! 03.
Москва — 2021 Илья Данилкин Senior Engineer / Scrum Master
avito-tech nezorflame nezorflame Draft & proposal Ссылки: Artwork: ashleymcnamara/gophers awesome-go: resource embedding pkg.go.dev/embed