概要
golang では flag パッケージなどを使うと CLI ツールを簡単に作成できます
サードパーティー製のパッケージもいろいろと用意されていますが今回は flag パッケージだけを使って作成してみました
環境
- Mac OS X 10.12.4
- golang 1.8
CLI ツールのコード
構造体を使ってそれっぽく書いてみました
package main
import (
"flag"
"fmt"
)
type User struct {
Name *string
Age *int
Gender *bool
}
func NewUser() (u User) {
return User{}
}
// 引数の値を構造体にセットする
func (u *User) Init() {
u.Name = flag.String("n", "", "Your name")
u.Age = flag.Int("a", -1, "Your age")
u.Gender = flag.Bool("g", false, "Your gender. True is male")
flag.Parse()
}
// ここにメインの実装をしていく
func (u *User) Run() {
u.print()
}
func (u *User) print() {
if *u.Name != "" {
fmt.Printf("Your name is %s\n", *u.Name)
}
if *u.Age >= 0 {
fmt.Printf("Your name is %d\n", *u.Age)
}
if *u.Gender {
fmt.Println("Your gender is male")
} else {
fmt.Println("Your gender is female")
}
}
func main() {
u := NewUser()
u.Init()
u.Run()
}
- go fmt main.go && go build main.go
- ./main -n hawksnowlog -a 10 -g
とすると実行できます
流れとしては引数として受け取った値は構造体に設定しておきます
Run メソッド内にメイン処理を書く想定です
設定した構造体の値を使っていろいろな処理をここに書いていきます
DB の値を取得したり、他の API をコールしてもいいと思います
最後に
golang の標準パッケージ flag を使って簡単な cli ツールを作成してみました
公開する場合などはバイナリを配布するだけで完了なので簡単です
サードパーティー製のパッケージも試してみたいなと思っています
0 件のコメント:
コメントを投稿