Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Go_Night_Talks_2026_-_momom.pdf

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →
Avatar for momom-i momom-i
September 20, 2026
120

 Go_Night_Talks_2026_-_momom.pdf

Avatar for momom-i

momom-i

September 20, 2026

Transcript

  1. 自己紹介 Momo Ito (@momom) 2022年4月入社 Merpay / Code&Netpayment チーム *

    コードとオンライン決済のバックエンドエンジニア * 正式には Credit & Payment Backend Service チーム 2
  2. 前置き: この話は GopherCon 2026 より 今回の話は、 GopherCon 2026 "Receipts from

    the Go Linker"(Mikayla Toffler / Datadog) の発表を引用しています。 3
  3. オブジェクトファイル ブロック 中身 リンカにおける用途 Header Offsets等 Strings 文字列の実体 Autolib import

    したパッケージパス 依存パッケージの把握 SymbolDefs 名前 / Type / Flag / Size シンボル情報の参照 Relocs Off / Type / Sym 各ブロックの位置の把握 参照先の解決等 最終的な番地記載 Aux Type / Sym シンボル同士の対応把握 Data バイト列 機械語・定数の実体把握 Index / Hash *Index / Hash / RefFlags ランダムアクセス・重複排除のため 6
  4. リンカの役割 役割 内容 1. Loadlib オブジェクトファイルの読み込み 2. Deadcode 到達不能な必要のないシンボルの排除 3.

    Textaddress / Dodata 生き残ったシンボルの番地の割り当て 4. Pclntab プログラム実行時に必要な番地と関数名などの対応表の作 成 5. Asmb バイナリへの書き出し 7
  5. リンカの役割 役割 内容 1. Loadlib オブジェクトファイルの読み込み 2. Deadcode 到達不能な必要のないシンボルの排除 3.

    Textaddress / Dodata 生き残ったシンボルの番地の割り当て 4. Pclntab プログラム実行時に必要な番地と関数名などの対応表の作 成 5. Asmb バイナリへの書き出し 8
  6. 2. Deadcodeの難点 以下を両方満たすときに interface に入る型の、呼んでいない公開メソッドが残る = 最終的なバイナリサイズがその分増える 1. 依存パッケージ全体を含め、到達可能なコードの中に1箇所でも reflect.Value.Method,

    reflect.Type.Method, または引数が定数でない reflect.Value.MethodByName, reflect.Type.MethodByName が使用され ている 2. 到達可能なコードの中で、その型が interface として使われる時 9
  7. 2. Deadcodeの難点 以下を両方満たすときに interface に入る型の、呼んでいない公開メソッドが残る = 最終的なバイナリサイズがその分増える 1. ★ 依存パッケージ全体を含め、到達可能なコードの中に

    1箇所でも reflect.Value.Method, reflect.Type.Method, または引数が定数でない reflect.Value.MethodByName, reflect.Type.MethodByName が使用され ている 2. 到達可能なコードの中で、その型が interface として使われる時 1. を潰すことが大事 10
  8. 検知方法 • go tool nm ◦ • go mod why

    ◦ • importの連鎖を辿ることができる whydeadcode ◦ • バイナリの中で何のシンボルが大きく占めているかわかる 自分のプログラムのどこに原因があるか知ることができる goda ◦ 自分のプログラムの中でDeadcode無効化の影響を受けているパッケージを調べ ることができる • go-size-analyzer ◦ パッケージごとにバイナリサイズを調べることができる 12
  9. Thank you! 以上で発表を終わりますmm Reference: • GopherCon 2026 "Receipts from the

    Go Linker"(Mikayla Toffler / Datadog) • https://www.datadoghq.com/blog/engineering/agent-go-binaries/ 16