Golang 커맨드라인 패키지를 만들 수 있는 cli 라이브러리 알아보기
오늘은 Golang에서 커맨드라인 프로그램 패키지를 만들 수 있는 cli 라이브러리를 알아보려 합니다.
cli 설치
우선 Golang의 환경을 구성하기 위해 https://golang.org/dl/ 에서 윈도우, 리눅스, 맥에서 설치 프로그램을 내려받을 수 있습니다.
맥에서 brew로 쉽게 설치할 수 있습니다.
brew install go
우분투에서도 apt로 쉽게 설치할 수 있습니다.
sudo apt-get install golang-go
go get으로 github에서 호스팅되고 있는 cli 패키지를 설치합니다.
go get github.com/mkideal/cli
홈의 go 폴더에 cli 소스코드와 패키지 파일이 생성됩니다.
예제
package main
해당 소스코드를 실행 파일로 인식하게 해주도록 main이라고 선언합니다.
import (
"fmt"
"os"
"github.com/mkideal/cli"
)
fmt와 os 그리고 cli 패키지를 가져옵니다.
type argT struct {
cli.Helper
Str string `cli:"*str" usage:"print string" dft:"hello"`
I int `cli:"*i,integer" usage:"print integer" dft:"1"`
B bool `cli:"*b" usage:"print boolean" dft:"True"`
StrArr []string `cli:"s,strArr" usage:"print string array`
M map[string]int `cli:"m" usage:"print map"`
문자열, 정수형, 논리, 슬라이스 타입의 인자를 받을 수 있으며, 별표로 꼭 받아야 되는 인자인지도 구별할 수 있습니다.
Version bool `cli:"!v" usage:"note the version"`
}
또한 느낌표는 강제로 Validate 과정을 통과하여 기존의 필수 인자를 무시할 수 있습니다.
func (argv *argT) Validate(ctx *cli.Context) error {
if argv.I > 10 {
return fmt.Errorf("out of range")
}
if argv.B == false {
return fmt.Errorf("invalid")
}
return nil
}
Validate 메소드로 들어오는 값을 검사할 수 있습니다.
func main() {
os.Exit(cli.Run(new(argT), func(ctx *cli.Context) error {
argv := ctx.Argv().(*argT)
if argv.Version {
ctx.String("1.0\n")
return nil
}
ctx.JSONln(ctx.Argv())
return nil
}))
}
메인 함수에서 값을 받아서 출력할 수 있습니다.
Written on July 30, 2019