goでassemblyを見たいときに can't find import <package>

例えば以下のようなファイルがあるとして。assemblyを覗きたいときに go tool compile を使おうとする。

$ tree
.
├── Makefile
├── go.mod
├── m.go
└── main.go

0 directories, 5 files

上手くいかない。

$ go tool compile -S -N main.go
main.go:6:2: can't find import: "m"

hmm。ちなみに -N は最適化を切るオプション。

go toolではなく go buildを使えば良い。

$ go build -gcflags="-S -N" main.go
# command-line-arguments
...
    0x0000 00 00 06 75 6e 73 61 66 65                       ...unsafe
gclocals·7d2d5fca80364273fb07d5820a76fef4 SRODATA dupok size=8
    0x0000 03 00 00 00 00 00 00 00                          ........
gclocals·6a804bb9551bc35faf0d01b9f9d373b2 SRODATA dupok size=14
    0x0000 03 00 00 00 0b 00 00 00 00 00 80 00 04 00        ..............

ファイル

main.go

// +build ignore

package main

import (
    "m"
    "net/url"
)

func main() {
    v, _ := url.ParseQuery("name=foo")
    m.PrintIfGet(v, "name")
}

m.go

package m

import "fmt"

type Getter interface {
    Get(key string) string
}

func PrintIfGet(g Getter, k string) {
    v := g.Get(k)
    if v != "" {
        fmt.Println("yay", k, v)
    }
}

go.mod

module m

go 1.15

gist

参考