2017年4月14日金曜日

golang で CLI ツールを作成してみた

概要

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 件のコメント:

コメントを投稿