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, pls stop breaking my editor – Rebecca Stambler
Search
GopherCon Russia
April 13, 2019
Programming
0
450
Go, pls stop breaking my editor – Rebecca Stambler
GopherCon Russia
April 13, 2019
Tweet
Share
More Decks by GopherCon Russia
See All by GopherCon Russia
Go Profiling from Bottom Up - Felix Geisendörfer
gopherconrussia
0
220
Learning Unsung Gotchas of Go - Rashmi Nagpal
gopherconrussia
1
280
Прозрачный gRPC-proxy один-ко-многим - Андрей Смирнов
gopherconrussia
0
150
Из Python в Go и обратно - Андрей Минкин
gopherconrussia
0
150
Оптимизация работы с PostgreSQL в Go: от 50 до 5000 RPS - Иван Осадчий
gopherconrussia
0
170
Пакет embed: распаковка знаний - Илья Данилкин
gopherconrussia
0
240
За пару мгновений до main() - Олег Ковалев
gopherconrussia
0
140
Тестирование в Go c Ginkgo и Gomega - Александр Егурнов
gopherconrussia
0
130
Building an Autoscaling HTTP Proxy for Kubernetes - Aaron Schlesinger
gopherconrussia
0
130
Other Decks in Programming
See All in Programming
STUNMESH-go: Wireguard NAT穿隧工具的源起與介紹
tjjh89017
0
380
Infer入門
riru
4
1.5k
画像コンペでのベースラインモデルの育て方
tattaka
3
1.7k
Vibe coding コードレビュー
kinopeee
0
450
エンジニアのための”最低限いい感じ”デザイン入門
shunshobon
0
110
Bedrock AgentCore ObservabilityによるAIエージェントの運用
licux
9
700
技術的負債で信頼性が限界だったWordPress運用をShifterで完全復活させた話
rvirus0817
1
1.9k
ライブ配信サービスの インフラのジレンマ -マルチクラウドに至ったワケ-
mirrativ
1
240
Understanding Ruby Grammar Through Conflicts
yui_knk
1
110
あまり知られていない MCP 仕様たち / MCP specifications that aren’t widely known
ktr_0731
0
280
兎に角、コードレビュー
mitohato14
0
140
管你要 trace 什麼、bpftrace 用下去就對了 — COSCUP 2025
shunghsiyu
0
420
Featured
See All Featured
Done Done
chrislema
185
16k
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.9k
Optimizing for Happiness
mojombo
379
70k
Docker and Python
trallard
45
3.5k
Unsuck your backbone
ammeep
671
58k
Code Reviewing Like a Champion
maltzj
525
40k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
470
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
Facilitating Awesome Meetings
lara
55
6.5k
Transcript
Go, pls stop breaking my editor MOSCOW, RUSSIA APRIL 13
2019 REBECCA STAMBLER
None
None
None
Go,
Go, please stop breaking my editor!
Rebecca Stambler Software Engineer, Google @stamblerre
None
None
None
None
None
My editor isn’t working!
My editor isn’t working! • There are many different editors
and many different features
VSCode Goland Vim
My editor isn’t working! • There are many different editors
and many different features • Many features are slow
My editor isn’t working! • There are many different editors
and many different features • Many features are slow • New Go releases break features
None
My editor isn’t working! • There are many different editors
and many different features
User triggers go-to-definition
User triggers go-to-definition VSCode Go extension
User triggers go-to-definition VSCode Go extension godef
User triggers go-to-definition VSCode Go extension godef
User triggers go-to-definition VSCode Go extension godef VSCode opens file
at the specified position
godef gopkgs go-outline go-symbols VSCode guru gorename gomodifytags goplay Go
extension
godef gopkgs go-outline go-symbols VSCode guru gorename gomodifytags goplay impl
gotype-live gocode gogetdoc goimports goreturns goformat golint Go extension
godef gopkgs go-outline go-symbols VSCode guru gorename gomodifytags goplay impl
gotype-live gocode gogetdoc goimports goreturns goformat golint gotests gometalinter staticcheck golangci-lint revive fillstruct dlv godoctor Go extension
godef gopkgs go-outline go-symbols guru gorename gomodifytags goplay impl gotype-live
gocode gogetdoc goimports goreturns goformat golint gotests gometalinter staticcheck golangci-lint revive fillstruct dlv godoctor
My editor isn’t working! • There are many different editors
and many different features • Many features are slow
Command-line tools
Command-line tools • Most of these tools work on 1
request per process
Command-line tools • Most of these tools work on 1
request per process • The tool has to parse your file and type-check your dependencies EVERY TIME!
My editor isn’t working! • There are many different editors
and many different features • Many features are slow • New Go releases break features
An example
An example: gocode • A tool for autocompletion
An example: gocode • A tool for autocompletion • Go
1.10 broke nsf/gocode
An example: gocode • A tool for autocompletion • Go
1.10 broke nsf/gocode • Fixed in mdempsky/gocode
An example: gocode • A tool for autocompletion • Go
1.10 broke nsf/gocode • Fixed in mdempsky/gocode • And then...Go modules
An example: gocode • A tool for autocompletion • Go
1.10 broke nsf/gocode • Fixed in mdempsky/gocode • And then...Go modules • Resulting in stamblerre/gocode
Takeaways • At this rate, we will have a version
of gocode for every version of Go
Takeaways • At this rate, we will have a version
of gocode for every version of Go • Your tools shouldn’t break when you upgrade
Why did gocode keep breaking?
Why did gocode keep breaking? • When Go changes, tools
change
Why did gocode keep breaking? • When Go changes, tools
change • When go build changes, tools change more
Why did gocode keep breaking? • When Go changes, tools
change • When go build changes, tools change more • Tools copy the behavior of the Go compiler
foo.go
foo.go github.com/stamblerre/foo
foo.go github.com/stamblerre/foo a c b dependencies
None
How will we fix your editor?
How will we fix your editor? 1. Stop tools from
breaking every 6 months
How will we fix your editor? 1. Stop tools from
breaking every 6 months 2. Support a set of features for all editors
How will we fix your editor? 1. Stop tools from
breaking every 6 months
gocode
go/packages gocode
go/packages gocode Which build system am I running in?
go/packages gocode Which build system am I running in? go
1.10 go 1.11 gb go 1.12
go/packages • Reduces the maintenance burden
go/packages • Reduces the maintenance burden • When a new
Go release comes out, fix the driver, not the tools
How will we fix your editor? 1. Stop tools from
breaking every 6 months 2. Support a set of features for all editors
Language Server Protocol A standardized protocol for communication between editors
and language servers
godef gopkgs go-outline go-symbols guru gorename gomodifytags goplay impl gotype-live
gocode gogetdoc goimports goreturns goformat golint gotests gometalinter staticcheck golangci-lint revive fillstruct dlv godoctor
Go language server
gopls
gopls • The Go language server
gopls • The Go language server • Owned and maintained
by the Go team and community
gopls • The Go language server • Owned and maintained
by the Go team and community • Currently in alpha
gopls • The Go language server • Owned and maintained
by the Go team and community • Currently in alpha • Pronounced “Go please”
gopls is faster • All features benefit from caching
gopls is faster • All features benefit from caching •
Completion is noticeably faster (less than 1 ms)
gopls is faster • All features benefit from caching •
Completion is noticeably faster (less than 1 ms) • Remains fast with modules
gopls is extensible • Adding new features is easier
gopls is extensible • Adding new features is easier •
Planned:
gopls is extensible • Adding new features is easier •
Planned: ◦ References, rename
gopls is extensible • Adding new features is easier •
Planned: ◦ References, rename ◦ More diagnostics (lint, custom, etc.)
gopls is extensible • Adding new features is easier •
Planned: ◦ References, rename ◦ More diagnostics (lint, custom, etc.) ◦ Quick fix suggestions
gopls is reliable
gopls is reliable • Testing framework
gopls is reliable • Testing framework • Go team ownership
gopls is reliable • Testing framework • Go team ownership
• Coordination with community
Information To install: golang.org/wiki/gopls
Information To install: golang.org/wiki/gopls To contribute: golang.org/wiki/golang-tools
Thank you • Go team members ◦ Ian Cottrell ◦
Peter Weinberger ◦ Michael Matloob • Go community members ◦ Paul Jolly ◦ Ramya Rao ◦ Billie Cleek ◦ And many more!
None
None
None
Image credits • Gopher image by Ashley McNamara • Fire
extinguisher image via strikefirstusa.com • Icons via flaticon.com, made by Freepik