at kaneshin

Free space for me.

The Go Playgroundのちょっとした機能

f:id:laplus-knsn:20181208223241p:plain
The Go Playground

この記事は Go Advent Calendar 2018 8日目の記事です。

はじめに

Goで簡単にコードを書いて共有するときはThe Go Playgroundを利用することが多いと思いますが、実は隠れ機能みたいなものがあるので今回はそれを紹介します。

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のファイルとしてダウンロードすることができます。

f:id:laplus-knsn:20181208231000p:plain

これは、最初教えてもらったときは「嘘だろ」みたいな印象でしたが、なかなか面白い機能だなと。

※追記

どうやら、選択していなくてもフォーカスが当たっていれば良いようです!

おわりに

普段使い慣れている人にとって新しい情報がなかった可能性が高いですが、初心者の人は知らない可能性が高いので、ぜひ周りにGoを触り始めた人に共有してもらえると助かります。

もっともっと、当たり前の情報を提供してGo初心者の方の敷居を下げることに貢献していければと思います。