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