The Go Playgroundが複数ファイル対応になった
Goコミュニティでみんなが便利に使っているThe Go Playgroundですが、ついに複数ファイルに対応しました。
参考:https://github.com/golang/go/issues/32040
txtarという複数のファイルを1つのファイルにまとめる方法を使うことによって複数のファイルを記述しています。
例えば、次のようなディレクトリ構成のGoのプロジェクトがあったとします。
.
├── fuga
│ └── fuga.go
├── go.mod
└── main.go
これをtxtar形式で1つのファイルにまとめると次のようになります。
-- go.mod --
module hogera
go 1.12
-- fuga/fuga.go --
package fuga
func Fuga() string {
return "Fuga"
}
-- main.go --
package main
import (
"fmt"
"hogera/fuga"
)
func main() {
fmt.Println(fuga.Fuga())
}
txtar形式はファイルを-- ファイルパス --
で区切って表現します。
シンプルな形式なので簡単に書くことができますが、ファイル中に--
で始まる行があるとうまくいかないので注意が必要です。
package main
import (
"fmt"
)
/*
-- hogera --
*/
func main() {
fmt.Println("Hello, playground")
}
手で入力していくのはなかなか大変なため、Chromeの拡張機能を使うとファイルごとにタブで記述できるようになるため便利です。
コマンドラインから複数のファイルをまとめてシェアする
コマンドラインから手元のソースコードをサクッとシェアできると便利です。
筆者が開発しているThe Go Playgroundをコマンドラインから操作するツールであるgp
を使うと簡単に複数のファイルをtxar形式でシェアすること可能になります。
gp
のインストールはgo get
で行うことができます。
$ go get https://github.com/tenntenn/goplayground/cmd/gp
複数のファイルをまとめてシェアするには、次のようにshare
サブコマンドを用います。
$ gp share a.go b.go
複数のファイルをまとめるには、次のようにfind
コマンドなどで用いると良いでしょう。
なお、ここでは不可視ファイルを無視するように-path '*/\.*'
を指定しています。
find . -not -path '*/\.*' -type f | xargs gp share
The Go Playgroundからソースコードをダウンロードする
gp
コマンドを用いるとThe Go Playground上でシェアされたコードをダウンロードすることもできます。
次のように何も指定しない場合には標準出力に出力されます。
$ gp download https://play.golang.org/p/sTkdodLtokQ
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello, playground")
}
txtar形式の場合でも何も指定しなければそのまま標準出力に出力されますが、-dldir
オプションでディレクトリを指定するとディレクトリ以下にtxttar形式を展開した形でファイルやディレクトリを保存してくれます。
$ gp download -dldir=output https://play.golang.org/p/Ccn7TxELuAT
$ tree output
output
├── fuga
│ └── fuga.go
├── go.mod
└── main.go
まとめ
gp
便利なのでぜひ使ってみてください。