Open14
go/analysisのPlaygroundで動かしたい
A Tour of Goみたいなやつがほしい。つまり、The Go Playgroundみたいなやつがほしい。
ruleguardにPlaygroundがあることを知る。
本体はこっちか。
analysis.Passを時前で作ってるけど、型チェックはしてないのでmain
パッケージのみでインポートしない前提になってるっぽい。
型チェックはデフォルトでは.aファイルを読みに行くので、ファイルシステムがまともに用意されていないWasmでは厳しい。しかし、types.Importerインタフェースを実装すればどうにかなる。
types.Importerインタフェースの実装は、go/importerパッケージにあり、デフォルトの挙動はgcとかgccgoとかになってる。しかし、sourceを指定すると、ソースコードから型チェックをやってくれる。
ファイルの読み込みをfs.FSとかからに置き換えることができれば、embed.FSを使ったり、txtarfsを使ったりできる。
srcimporterはbuild.Defaultを使っていて、こいつが実はフィールドでファイルシステムへのアクセスを抽象化しているので、入れ替えることは可能。パッケージ変数のフィールドを入れ替えるのは忍びないけど。
fmt.Println
関数の引数をちょっと変えて、_gopath/src/fmt以下に起き、embedしてみて、そのembed.FSからファイルを読み込むようにしてみる。GOROOTを入れ替えて置く必要がある。
うまく読み込めた。
$ go run main.go
IsDir _gopath/src/fmt
ReadDir _gopath/src/fmt
OpenFile _gopath/src/fmt/fmt.go
OpenFile _gopath/src/fmt/fmt.go
func fmt.Println(s string)
最後に出てるのがfmt.Println
の情報で本物のシグネチャとちょっと違うのが分かる。つまりうまく読み込めている。