この記事は Go Advent Calendar 2018 8日目の記事です。
はじめに
Goで簡単にコードを書いて共有するときはThe Go Playgroundを利用することが多いと思いますが、実は隠れ機能みたいなものがあるので今回はそれを紹介します。
テストコードの実行
https://play.golang.org/ のページを開くと、下記のようにmain関数が用意されたPlaygroundが開きます。これだけだとmain関数をメイン処理として記述しなければならないと思いますが、全くこれ通りでなくても動くことが About に記述されています。
If the program contains tests or examples and no main function, the service runs the tests.
もし、テストや例のコードが含まれてメイン関数がない場合、テストを実行します
TestXxx関数
package main import ( "testing" ) func TestXxx(t *testing.T) { t.Errorf("failed") }
つまり、こののコードをテストとして実行することができ、下記のような結果が返却されます。
=== RUN TestXxx --- FAIL: TestXxx (0.00s) main.go:8: failed FAIL 1 test failed.
ExampleXxx関数
TestXxx
と同様に ExampleXxx
を実行することも可能です。そもそも、 ExampleXxx
を知らない人はPlayground環境用とかではなく、Go標準の機能としてあるということを覚えていってもらえればと思います。
☞ testing#Examples - The Go Programming Language
package main import ( "fmt" ) func ExampleHello() { fmt.Println("hello") // Output: hell }
下記のような結果が返却されます。
=== RUN ExampleHello --- FAIL: ExampleHello (0.00s) got: hello want: hell FAIL 1 test failed.
共有リンクの応用
Playgroundに記入したファイルを共有するとき、共有リンクをPlayground上で発行し、そのリンクを共有すると思います。このリンクですが、ちょっとしたことで振る舞いを変えることができます。
☞ https://play.golang.org/p/T15EIZ0YUXa
Embeddedモード
iframeを利用して、Playgroundの実行環境をページに埋め込むことが可能です。
<iframe src="https://play.golang.org/p/T15EIZ0YUXa" width=600 height=300 frameborder=1></iframe>
このように表示されます。
text/plainで参照
共有リンクのサフィックスに .go
を追加すると、Rawファイルとして参照することが出来ます。
☞ https://play.golang.org/p/T15EIZ0YUXa.go
$ curl -I "https://play.golang.org/p/T15EIZ0YUXa.go" HTTP/2 200 date: Sat, 08 Dec 2018 14:02:21 GMT content-type: text/plain; charset=utf-8 content-length: 105 vary: Accept-Encoding strict-transport-security: max-age=31536000; preload via: 1.1 google
Goファイルとして直接ダウンロード
社内のGoエンジニアから聞いた機能ですが、テキストエリアにあるコードを全選択してからWebの保存 (Command+S in macOS) をすると、ファイル共有リンクが生成された上で、直接Goのファイルとしてダウンロードすることができます。
これは、最初教えてもらったときは「嘘だろ」みたいな印象でしたが、なかなか面白い機能だなと。
※追記
どうやら、選択していなくてもフォーカスが当たっていれば良いようです!
macではコード欄にフォーカスが入っていれば全選択しなくてもcommand+Sでダウンロードされます。手癖なのでよく落ちてきます...q@w@p https://t.co/piZ8FbOYmJ
— Ryuji Iwata (@qt_luigi) December 8, 2018
おわりに
普段使い慣れている人にとって新しい情報がなかった可能性が高いですが、初心者の人は知らない可能性が高いので、ぜひ周りにGoを触り始めた人に共有してもらえると助かります。
もっともっと、当たり前の情報を提供してGo初心者の方の敷居を下げることに貢献していければと思います。