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
Go generate everything
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Alexey Palazhchenko
November 08, 2016
Programming
1
430
Go generate everything
Alexey Palazhchenko
November 08, 2016
Tweet
Share
More Decks by Alexey Palazhchenko
See All by Alexey Palazhchenko
Using PostgreSQL's Background Worker Processes For Fun and Profit
aleksi
0
160
Песнь Хорьков и Гоферов
aleksi
0
380
Fuzzy generics
aleksi
0
170
On Ferrets and Gophers
aleksi
0
260
How to Go Wrong with Concurrency
aleksi
2
780
Adding context to existing code
aleksi
1
160
Зачем и как написать свой database/sql драйвер
aleksi
1
200
Cooking gRPC
aleksi
1
900
Profiling and Optimizing Go Programs
aleksi
1
1.8k
Other Decks in Programming
See All in Programming
AI & Enginnering
codelynx
0
140
Agent Skills Workshop - AIへの頼み方を仕組み化する
gotalab555
12
6.9k
15年目のiOSアプリを1から作り直す技術
teakun
0
530
文字コードの話
qnighy
41
16k
AIによる開発の民主化を支える コンテキスト管理のこれまでとこれから
mulyu
3
2.1k
CSC307 Lecture 10
javiergs
PRO
1
690
日本だけで解禁されているアプリ起動の方法
ryunakayama
0
360
CSC307 Lecture 11
javiergs
PRO
0
580
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
450
DSPy入門 Pythonで実現する自動プロンプト最適化 〜人手によるプロンプト調整からの卒業〜
seaturt1e
1
280
株式会社 Sun terras カンパニーデック
sunterras
0
1.9k
Geminiの機能を調べ尽くしてみた
naruyoshimi
0
180
Featured
See All Featured
A designer walks into a library…
pauljervisheath
210
24k
BBQ
matthewcrist
89
10k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
130
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
190
How to Think Like a Performance Engineer
csswizardry
28
2.5k
Crafting Experiences
bethany
1
66
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
63
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
110
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
530
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.2k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
60
42k
How STYLIGHT went responsive
nonsquared
100
6k
Transcript
None
None
go generate everything
Зачем?
Зачем? • Парсеры, лексеры
Зачем? • Парсеры, лексеры • Конвертация данные (Unicode-таблицы)
Зачем? • Парсеры, лексеры • Конвертация данные (Unicode-таблицы) • Встраивание
бинарных данных
Зачем? • Парсеры, лексеры • Конвертация данные (Unicode-таблицы) • Встраивание
бинарных данных • Bailerplate, автодополнение в редакторе
Зачем? • Парсеры, лексеры • Конвертация данные (Unicode-таблицы) • Встраивание
бинарных данных • Bailerplate, автодополнение в редакторе • Mocks
Зачем? • Парсеры, лексеры • Конвертация данные (Unicode-таблицы) • Встраивание
бинарных данных • Bailerplate, автодополнение в редакторе • Mocks • Generics?!
Как?
Как? • go/build
Как? • go/build • go/token, go/scanner
Как? • go/build • go/token, go/scanner • go/ast, go/parser
Как? • go/build • go/token, go/scanner • go/ast, go/parser •
go/constants, go/types
Как? • go/build • go/token, go/scanner • go/ast, go/parser •
go/constants, go/types • go/printer, go/format
Как проще?
Как проще? • text/template
Как проще? • text/template • golang.org/x/tools/go/buildutil
Как проще? • text/template • golang.org/x/tools/go/buildutil • golang.org/x/tools/go/ast/astutil
Как проще? • text/template • golang.org/x/tools/go/buildutil • golang.org/x/tools/go/ast/astutil • golang.org/x/tools/go/loader
github.com/josharian/impl $ impl 'c *Connected' events.Event func (c *Connected) String()
string { panic("not implemented") } func (c *Connected) Type() string { panic("not implemented") }
golang.org/x/tools/cmd/stringer $ stringer -type Type func (i Type) String() string
{ i -= 1 if i < 0 || i >= Type(len(_index)-1) { return fmt.Sprintf("Type(%d)", i+1) } return _name[_index[i]:_index[i+1]] }
//go:generate -type Type $ go generate foo/bar/baz
Generics func NewQueue() *Queue { return &Queue{items: make([]T, 0)} }
func (q *Queue) Push(item T) {} func (q *Queue) Pop() T {}
gopkg.in/reform.v1 type Struct interface { String() string Values() []interface{} Pointers()
[]interface{} View() View }
Вопросы?
Сообщество 12 golang-ru.slack.com 4gophers.ru/slack gophers.slack.com meetup.com/Golang-Moscow meetup.com/GolangNSK meetup.com/Golang-Peter golangshow.com