ソースコードから理解する技術-UnderSourceCode

手を動かす(プログラムを組む)ことで技術を理解するブログ

gorunでGolangのソースをシェルスクリプトのように実行してみる

https://github.com/erning/gorun
gorunをちょっと試してみました。試した内容としては

  • gorunをローカルにgo getで入れる
  • Golangでソースを書くが、importで他のライブラリを使うものとする
  • ソースをGOPATHの外の場所に置き、シェルスクリプトのようにソースを指定して実行してみる

となります。

他のライブラリを使ってみたのは、Golangで処理を書く場合に単体で書くことは少ないと思ったためです。
以下、やってみたことについて纏めてみます。

やってみたこと

1. gorunなど必要なものを取得

「go get」で必要なものを取得します。今回は「gorun」と、ソースの中で「go-linq」を使ったので、この2つを「go get」で取得します。
https://github.com/ahmetb/go-linq

$ go get github.com/erning/gorun
$ go get github.com/ahmetb/go-linq/v3

2. gorunの取得先を確認

「go get」で取得すると、gorunの本体が「$GOPATH/bin/」配下に取得されます。この「$GOPATH/bin/」にパスが通っているか、もしくは「gorun」がパスが通っている任意の場所に入っていることを確認します。

3. ソースを書く

任意の処理を通常のGolangのように「~.go」のファイル名で実装します。ただし先頭行には「#!/usr/bin/env gorun」を記載します。
これ以外は通常のGolangの処理そのままです。私は 先に挙げた「go-linq」のREADMEのソースをそのまま使いました。

なお、エディタによっては先頭行の「#!/usr/bin/env gorun」があると入力補完やフォーマットが効かないこともあるようです。
この場合は先頭行をコメントアウトして実装し(実装中は「$ go run ~.go」などで動作確認し)、実装が終わったら先頭行を復活させればいいでしょう。

4. ソースの実行

GOPATH以外でも動くかを確認するため、ソースを任意の場所にコピーします。
ソースに実行権限をつけ、「$ ./~.go」とシェルスクリプトのようにファイル名を指定して実行してみます。

まとめ

上記のような手順で、Golangのソースをビルドしてバイナリを作成することなく、シェルスクリプトのようにファイル名で実行することができました。
シェルで書くには複雑だが、インフラ作業などで処理手順としていつでも見れるようにソースとして配置しておいて実行したい、みたいなケースでは使えるかもしれません。