Skip to content

wh64dev/commando

Repository files navigation

Commando

GoDoc Build Status

  • Golang으로 만든 간단한 Argument 파싱 & 핸들링 라이브러리 입니다!

How to use

  • 더 자세한 예제는 example로 가시면 확인 하실 수 있어요!
package main

import (
	"fmt"
	"github.com/devproje/commando"
	"github.com/devproje/commando/option"
	"os"
)

func main() {
	// 파일 이름은 제외한 상태로 arguments 주입
	command := commando.CommandoNew()

	// 단일 서브 명령어 ex) ./sample test
	var test = commando.CommandoNodeNew(command, "test", "테스트 명령어 입니다!")
	commando.CommandNodeHandlerSet(test, func(n *commando.CommandoNode) error {
		fmt.Println("Hello, World!")
		return nil
	})

	// 옵션이 포함된 서브 명령어 ex) ./sample print --name <string> --test-str <string>
	var print = commando.CommandoNodeNew(commando, "print", "테스트 출력 명령어 입니다!")
	commando.CommandoNodeOptionsAppends(print, []option.OptionData[
		option.OptionData{
			Name:        "name",
			Description: "이름을 입력 해주세요",
			Alias:       []string{"-n"},
			Type:        option.STRING,
		},
		option.OptionData{
			Name:        "test-str",
			Description: "메시지를 입력 해주세요 (optional)",
			Alias:       []string{"-T"},
			Type:        option.STRING,
		},
	])

	commando.CommandNodeHandlerSet(print, func(n *commando.CommandoNode) error {
		var err error
		var name, str string

		// 필수로 인자 주입 받을때
		var nameOpt = commando.CommandoNodeOptionFind(n, "name")
		if nameOpt == nil {
			return fmt.Errorf("error: 이름이 없습니다!")
		}

		name, err = option.ParseString(n, *nameOpt)
		if err != nil {
			return err
		}

		// 선택적으로 인자주입을 고려할때
		var strOpt = commando.CommandoNodeOptionFind(n, "test-str")
		if strOpt == nil {
			str = "nil"
		} else {
			str, err = commando.ParseString(n, *strOpt)
			if err != nil {
				str = "nil"
			}
		}

		fmt.Printf("입력받은 이름: %s\n", name)
		fmt.Printf("선택적으로 적은 문자열: %s\n", str)
		return nil
	})

	// 인자 없이 실행할 수 있는 핸들러 ex) ./sample
	// 추자적으로 노드를 이용하므로 인자도 이 함수 뒤에 추가 가능
	commando.CommandoInternalSet(command, func(n *commando.CommandoNode) error {
		fmt.Printf("Hello, Commando!\n")
		return nil
	}, ...)

	// 입력받은 arguments를 파싱 후 실행
	// WARNING: Execute() 함수는 **무조건** 명령어를 모두 설정 한 후에 실행해야 적용 됩니다.
	var err = command.Execute()
	if err != nil {
		panic(err)
    }
}
  • in terminal
~$ ./sample
Hello, Commando!
~$ ./sample test
Hello, World!
~$ ./sample print --name "Eungyo Lee"
입력받은 이름: Eungyo Lee
선택적으로 적은 문자열: nil

About

Simple Go command-line dispatcher

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages