- Golang으로 만든 간단한 Argument 파싱 & 핸들링 라이브러리 입니다!
- 더 자세한 예제는 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