Open4
Go CLIツールを作る
調査編
- 代表的なCLIフレームワークは、下記2つぽい。
比較
-
https://go.libhunt.com/compare-cobra-vs-cli-codegangsta
- 比較的更新が多いのはspf13/cobra
-
Go Command Line Tool Packagesをざっと試す
-
簡単なコマンドラインツールは flag
-
リッチなコマンドラインツールは spf13/cobra
-
-
awesome-go にある CLI アプリケーションフレームワークを試していく - Qiita
-
urfave/cli: 3 コマンド 2 サブコマンド程度でまあ見れないほどではないが、コマンドが増えるごとに縦に長くネストが深くなっていくのでこれが改善されると嬉しい
-
spf13/cobra: 各コマンドのファイル分割も容易(というかジェネレータだと別ファイルになる)なのでアプリケーションが大きくなっても見通しよくできそう
-
選定
- spf13/cobraはkubectlでも使われてるらしい。
- これを真似すればいい感じの作れるので、spf13/cobraにしてみる
spf13/cobraでCLIツールを作る①
フォルダ作成
# CLIツールの名前付けたフォルダ作成
$ mkdir -p goclitest
$ cd goclitest
# go.mod作成
$ go mod init goclitest
# cobraのインストール
$ go get github.com/spf13/cobra
$ go get github.com/spf13/viper
# コマンドのボイラーテンプレートを作成。
# viper=falseにすれば設定ファイル読み込み機能無しのシンプルなものになる。
$ cobra init --pkg-name goclitest --viper=true
# bundle install的なやつぽい。依存関係周り解決してくれるぽい。
$ go mod tidy
kubectlを真似してみる
参考になりそうなリンク
spf13/cobraでCLIツールを作る②
kubectlを真似るのはよく分からなかったので、まずシンプルに作ってみる
GoのInterface
-
Goのinterfaceがわからない人へ - Qiita
- implementsがない。
- interfaceにある方を全て実装することで自動的にinterface型として扱える
package編
- package内で定義する関数の先頭が小文字か大文字かでアクセサビリティが変わる
- 公開する場合は、先頭大文字
- 公開しない場合は、先頭小文字
- 参考: 【Go入門】パッケージの基本
自作package管理
├── cmd
│ └── root.go
├── go.mod
├── go.sum
├── LICENSE
├── main.go
└── system
└── system.go
こういう構成の場合、cmd/root.go
内でsystem/system.go
を参照したい場合は、importすればいい。
root.go
package cmd
import (
"goclitest/system"
)
...