Help us understand the problem. What is going on with this article?

The Go Playground上で簡単に複数のファイルをシェアする #golang

More than 1 year has passed since last update.

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形式はファイルを-- ファイルパス --で区切って表現します。
シンプルな形式なので簡単に書くことができますが、ファイル中に--で始まる行があるとうまくいかないので注意が必要です。

https://play.golang.org/p/4CGQN8slkSl

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便利なのでぜひ使ってみてください。

tenntenn
Go engineer / Gopher artist
mercari
フリマアプリ「メルカリ」を、グローバルで開発しています。
https://tech.mercari.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした