Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Go_Night_Talks_2026_-_momom.pdf
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
momom-i
September 20, 2026
120
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Go_Night_Talks_2026_-_momom.pdf
https://mercari.connpass.com/event/401987/
momom-i
September 20, 2026
Featured
See All Featured
My Coaching Mixtape
mlcsv
0
360
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Product Roadmaps are Hard
iamctodd
55
13k
Practical Orchestrator
shlominoach
192
12k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
550
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Faster Mobile Websites
deanohume
310
32k
RailsConf 2023
tenderlove
30
1.6k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
Leo the Paperboy
mayatellez
10
2.4k
Transcript
見覚えのない依存はどこから来るのか? Goのリンカ挙動と対策 @momom 株式会社メルペイ Go Night Talks 2026 – After
Conference / 2026-09-18 1
自己紹介 Momo Ito (@momom) 2022年4月入社 Merpay / Code&Netpayment チーム *
コードとオンライン決済のバックエンドエンジニア * 正式には Credit & Payment Backend Service チーム 2
前置き: この話は GopherCon 2026 より 今回の話は、 GopherCon 2026 "Receipts from
the Go Linker"(Mikayla Toffler / Datadog) の発表を引用しています。 3
TL;DR • Datadog Agentのバイナリサイズが爆増し調査した結果、呼び出しが一つもないコー ドがバイナリに入ってた • linkerの処理の中で不要なデッドコードを削除するはずが、いくつかのケースで削除が できない • 具体的な調査方法と対処法が紹介されていたため、特にライブラリや社内ツールメンテ
ナにおすすめ 4
Goのバイナリ生成 package a hoge.go, fuga.go… compile a.o link binary package
b hoge.go, fuga.go… compile b.o 5
オブジェクトファイル ブロック 中身 リンカにおける用途 Header Offsets等 Strings 文字列の実体 Autolib import
したパッケージパス 依存パッケージの把握 SymbolDefs 名前 / Type / Flag / Size シンボル情報の参照 Relocs Off / Type / Sym 各ブロックの位置の把握 参照先の解決等 最終的な番地記載 Aux Type / Sym シンボル同士の対応把握 Data バイト列 機械語・定数の実体把握 Index / Hash *Index / Hash / RefFlags ランダムアクセス・重複排除のため 6
リンカの役割 役割 内容 1. Loadlib オブジェクトファイルの読み込み 2. Deadcode 到達不能な必要のないシンボルの排除 3.
Textaddress / Dodata 生き残ったシンボルの番地の割り当て 4. Pclntab プログラム実行時に必要な番地と関数名などの対応表の作 成 5. Asmb バイナリへの書き出し 7
リンカの役割 役割 内容 1. Loadlib オブジェクトファイルの読み込み 2. Deadcode 到達不能な必要のないシンボルの排除 3.
Textaddress / Dodata 生き残ったシンボルの番地の割り当て 4. Pclntab プログラム実行時に必要な番地と関数名などの対応表の作 成 5. Asmb バイナリへの書き出し 8
2. Deadcodeの難点 以下を両方満たすときに interface に入る型の、呼んでいない公開メソッドが残る = 最終的なバイナリサイズがその分増える 1. 依存パッケージ全体を含め、到達可能なコードの中に1箇所でも reflect.Value.Method,
reflect.Type.Method, または引数が定数でない reflect.Value.MethodByName, reflect.Type.MethodByName が使用され ている 2. 到達可能なコードの中で、その型が interface として使われる時 9
2. Deadcodeの難点 以下を両方満たすときに interface に入る型の、呼んでいない公開メソッドが残る = 最終的なバイナリサイズがその分増える 1. ★ 依存パッケージ全体を含め、到達可能なコードの中に
1箇所でも reflect.Value.Method, reflect.Type.Method, または引数が定数でない reflect.Value.MethodByName, reflect.Type.MethodByName が使用され ている 2. 到達可能なコードの中で、その型が interface として使われる時 1. を潰すことが大事 10
例えば text/template L9 の有無でバイナリサイズが ±1MB 11
検知方法 • go tool nm ◦ • go mod why
◦ • importの連鎖を辿ることができる whydeadcode ◦ • バイナリの中で何のシンボルが大きく占めているかわかる 自分のプログラムのどこに原因があるか知ることができる goda ◦ 自分のプログラムの中でDeadcode無効化の影響を受けているパッケージを調べ ることができる • go-size-analyzer ◦ パッケージごとにバイナリサイズを調べることができる 12
既存バイナリへの対策 • バイナリのimportグラフに入らないパッケージに該当の関数を移動させる • 呼んでないがバイナリに入っている箇所を切り離すため、ビルドタグを使う • 依存パッケージをforkしてメソッドの呼び出しを無効化する ◦ reflect.Value.MethodByName,reflect.Type.MethodByNameの引数 を定数化するなど
◦ メンテナンスコストもかかるので場合によるが、Datadogでは この手法をとった例がある 13
補足資料 https://github.com/momom-i/go-night-talk-2026/tree/main もう少し詳細な説明を上記のレポジトリにおいているので、 興味があればぜひ 14
予防 新しく依存パッケージを増やす際はあらかじめ以下を確認したい • ライセンスの確認 • 更新頻度、コミット数 • 利用者数 • メンテナ数
• メンテナ反応速度 • ベンチマークやテストの有無 15
Thank you! 以上で発表を終わりますmm Reference: • GopherCon 2026 "Receipts from the
Go Linker"(Mikayla Toffler / Datadog) • https://www.datadoghq.com/blog/engineering/agent-go-binaries/ 16
採用 採用は随時以下行っているので興味のある方いればぜひ Product Engineer, Backend - Merpay Product Engineer, Backend
- Merpay Product Engineer, Backend - Merpay Product Engineer, Backend - Merpay 17