blog

ソフトウェア開発|GoでメソッドのGOSSAFUNCグラフをダンプする方法

この記事では、関数とメソッドのSSA出力を表示する方法について説明します。...

Oct 16, 2025 · 2 min. read
シェア

GoコンパイラのSSAバックエンドには、コンパイル段階のHTMLデバッグ出力を生成するツールがあります。この記事では、関数メソッドの SSA 出力を表示する方法について説明します。

関数、値メソッド、ポインタ・メソッドを含むサンプル・プログラムから始めましょう:

  1. package main
  2. import (
  3. type Numbers struct {
  4. vals []int
  5. func (n *Numbers) Add(v int) {
  6. n.vals = append(n.vals, v)
  7. func (n Numbers) Average() float64 {
  8. sum := 0.0
  9. for _, num := range n.vals {
  10. sum += float64(num)
  11. return sum / float64(len(n.vals))
  12. func main() {
  13. var numbers Numbers
  14. numbers.Add(200)
  15. numbers.Add(43)
  16. numbers.Add(-6)
  17. fmt.Println(numbers.Average())

SSAデバッグ出力はGOSSAFUNC環境変数によって制御されます。この変数にはダンプする関数の名前が入ります。これは関数の完全修飾名です。上記のfunc mainの場合、関数名はmain main.mainです。

  1. % env GOSSAFUNC=main go build
  2. runtime
  3. dumped SSA to ../../go/src/runtime/ssa.html
  4. dumped SSA to ./ssa.html

この例では、GOSSAFUNC=mainはmain.mainとruntime.mainという関数の両方にマッチします。これは少し不運なことですが、おそらく実際には大したことではありません。なぜなら、もしコードにパフォーマンス上の微調整を加えるのであれば、func mainの巨大なスパゲッティ・ブロックの中ではないからです。

この記事を見て、メソッドをダンプできるSSA出力を探したかもしれません。

ポインタ・メソッド func (n *Numbers) Add の SSA デバッグを表示するには、同等の関数を (*Numbers).Add名前にします:

  1. % env "GOSSAFUNC=(*Numbers).Add" go build
  2. dumped SSA to ./ssa.html

値メソッド func (n *Numbers) Add の SSA デバッグを表示するには、同等の関数を (*Numbers).Add, という名前にします:

  1. % env "GOSSAFUNC=(*Numbers).Average" go build
  2. dumped SSA to ./ssa.html
  1. Goをソースからビルドしていない場合、ランタイムパッケージへのパスが読み取り専用になり、エラーメッセージが表示されることがあります。この問題を解決するためにsudoを使用しないでください。

  2. シェルの基準注意

を経由して

Read next