🏗

Goのリポジトリを初期化するためのスクリプト

Go の勉強を開始していてプロジェクトの初期設定をサクッとつくるスクリプトというか bash alias を作りました。

# きっかけ

勉強のためいくつもディレクトリを分けてmain.goを書いていたものの、いちいち最初から手書きするのが面倒になってきたためです。

とりあえず main 関数の入ったmain.goと最低限のgo.modがあればよいのかな?という感じで、それらを生成するスクリプトを作りました。

# つくったもの

以下をシェルの設定に追加しました。
goinitで実行します。

goinit() {
  if [ -f main.go ]; then
    echo "main.go is already exists!"
    return 1
  fi
  echo -e "package main\n\nfunc main() {\n\n}" > main.go
  go mod init "$((git config --get remote.origin.url || basename `pwd`) | sed -e 's#https\?://##')"
}

1
2
3
4
5
6
7
8
9
  • 実行したディレクトリにmain.goが存在したら終了します
  • main.goがなければ、以下の内容で作成します
package main

func main() {

}
1
2
3
4
5
  • go mod init reponameを実行します
    • git リポジトリでなければカレントディレクトリ名をモジュール名に使います
    • https://が入っているとコケるのでsedで除去しています

# 改善点

以下のような点は今後修正していくと思います。

  • モジュール名は引数としても受け取れたほうが良いかも
  • main.goがあってgo.modがない場合とかにも対応できたほうが良いのでは?
  • 他に必要な物があれば足す

# まとめ

こういうものは既にたくさんあると思いますが自分用にミニマルに作りました。

あと、ghqのディレクトリを$GOPATH配下に置くべきなのかとか悩んでいたのですが、現在のバージョン(1.16)ではそのへんは考慮しなくて良いみたいですね。
Go は新しい概念がいろいろ多くて楽しいです。今後も楽しんでいきます。