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
290
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
250
Learning Unsung Gotchas of Go - Rashmi Nagpal
gopherconrussia
1
300
Прозрачный gRPC-proxy один-ко-многим - Андрей Смирнов
gopherconrussia
0
170
Из Python в Go и обратно - Андрей Минкин
gopherconrussia
0
180
Оптимизация работы с PostgreSQL в Go: от 50 до 5000 RPS - Иван Осадчий
gopherconrussia
0
220
За пару мгновений до main() - Олег Ковалев
gopherconrussia
0
170
Тестирование в Go c Ginkgo и Gomega - Александр Егурнов
gopherconrussia
0
150
Building an Autoscaling HTTP Proxy for Kubernetes - Aaron Schlesinger
gopherconrussia
0
160
Designing Pluggable Idiomatic Go Applications – Mark Bates
gopherconrussia
0
81
Other Decks in Programming
See All in Programming
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
150
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
610
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
吝嗇家のためのAI活用 / AI development for miser - ChatGPT + Issue Driven Development
tooppoo
0
200
What's New in Android 2026
veronikapj
0
200
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
370
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
400
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.6k
GitHubCopilotCLIのスラッシュコマンドを自作してみる
htkym
0
110
エンジニアにデザインハーネスを 〜デザインプロセスを規定するためのハーネス〜 / Design harness from an engineer's perspective
rkaga
2
1.7k
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
17
9.3k
Claude Team Plan導入・ガイド
tk3fftk
0
240
Featured
See All Featured
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
440
Paper Plane
katiecoart
PRO
2
52k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Between Models and Reality
mayunak
4
380
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
760
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.7k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Believing is Seeing
oripsolob
1
170
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