My External Storage

Mar 13, 2020 - 3 minute read - Comments - go

The Go Playground(play.golang.org)のショートカットキー

ちょっとした動作確認にThe Go Playgroundを多用する。

実は、The Go Playgroundにはショートカットキーが存在するので、マウス操作は必要ない。

TL+DR;

The Go Playgroundのショートカットキーについて記載があるところ

ちょっとした動作確認や、サンプルコードを手元(?)で動かしたいとき、The Go Playgroundを開いてそのまま書いている。
いちいちマウスをにぎるのがめんどくさいので、ショートカットキーを使って実行したり、フォーマットをかけている。
The Go PlaygroundのショートカットキーはThe Go Playground自体には書いていない。
実はA Tour of Goの冒頭に書いてあるショートカットキーがThe Go Playgroundでも利用できる。

The tour is interactive. Click the Run button now (or press Shift + Enter) to compile and run the program on a remote server. The result is displayed below the code.

When you click on Format (shortcut: Ctrl + Enter), the text in the editor is formatted using the gofmt tool. You can switch syntax highlighting on and off by clicking on the syntax button.

Go Playgroundの実装を確認。

せっかくなので、実装も確認した。 The Go Playgroundは次のリポジトリのコードで実行されている。

このリポジトリを確認すると、x/tools/godoc/staticパッケージを使ってplayground.jsというJavaScriptファイルをロードしている。

import "golang.org/x/tools/godoc/static"

func (s *server) handlePlaygroundJS(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-type", "text/javascript; charset=utf-8")
	rd := strings.NewReader(static.Files["playground.js"])
	http.ServeContent(w, r, "playground.js", s.modtime, rd)
}

x/tools/godoc/staticパッケージは次のリポジトリにある。

この中のplayground.jsファイルを確認すると、たしかにShiftキーやCtrlキーのイベントを確認していた。
他にもショートカット設定があるかな?と思ったが、この2つだけのようだ。

      if (e.keyCode == 13) { // enter
        if (e.shiftKey) { // +shift
          run();
          e.preventDefault();
          return false;
        } if (e.ctrlKey) { // +control
          fmt();
          e.preventDefault();
        } else {
          autoindent(e.target);
        }
      }

その他のThe Go Playground情報

最近のThe Go Playgroundは複数ファイルに分かれたサンプルコードも実行できる。
なので、パッケージのimport関係を確認したりすることもできる。

また、現在のThe Go Playgroundは標準パッケージ以外もimportできるので、privateなパッケージさえ含まなければ何でも実行できる。

終わりに

ショートカットキーについてはThe Go Playground内では言及されていないので、書いた。
図らずもstaticパッケージの配信方法も見れたので学びがあった。

参考

関連記事