Java 프로그래머가 Go 언어를 만져 보았다 (cobra로 CLI를 만들어 보았다)
모두 keita69sawada입니다.
Go 언어로 "CLI를 만들 때 좋은 패키지가 없을까?"라고 찾아 보면 cobra을 찾았습니다.
그럼, 「cobra에 대해 조사해 볼까!」라고
성게는이 기사입니다.
대상 독자
전제 조건
※ 환경은 chocolatey 에서의 셋업을 추천. 여기 참조
소개
cobra는 무엇을 할 수 있는가?
절차
1. 환경 준비
작업 공간(WS)을 만들고 go get으로 패키지를 가져옵니다.
하기를 코피페.
명령 (명령 프롬프트에서 실행)
set WS=%HOMEDRIVE%%HOMEPATH%\git\go-cobra
mkdir %WS%
cd %WS%
set GOPATH=%WS%
mkdir bin
go get -v -u github.com/spf13/cobra
go get -v -u github.com/spf13/cobra/cobra
2. 이번에 작성하는 샘플 CLI 앱 mytool이란?
mytool의 부속 명령 (hello)과 매개 변수 ("keita69sawada")를 전달하면 "Hello, [parameter] !!"를 반환하는 CLI 응용 프로그램입니다.
mytool 명령 이미지
mytool hello keita69sawada
>> Hello, keita69sawada !!
2. CLI 앱 템플릿 만들기
mytoolCLI 앱 템플릿을 만듭니다.
하기를 코피페.
명령 (명령 프롬프트에서 실행)
%GOPATH%/bin/cobra.exe init mytool
3. CLI 앱의 하위 명령 템플릿 만들기
hello 부속 명령의 템플릿을 만듭니다.
하기를 코피페.
명령 (명령 프롬프트에서 실행)
cd %GOPATH%/src
%GOPATH%/bin/cobra.exe add hello
4. 실행 파일(.exe) 만들기
생성된 템플릿을 컴파일합니다.
하기를 코피페.
명령 (명령 프롬프트에서 실행)
go install mytool
5. mytoolCLI 앱 실행
아무 것도 수정하지 않은 상태에서 실행해 보겠습니다.
5.1 hello 부속 명령 실행
하기를 코피페.
txt:コマンド(コマンドプロンプトで実行)
%GOPATH\bin\mytool hello
hello 부속 명령이 호출되었다는 메시지가 표시되었습니다.
※ 6. 폴더 구성 에 있는 ★hello.go에 이 메세지 표시의 구현이 있습니다
실행 결과
%WS%\src\mytool>%GOPATH%\bin\mytool hello
hello called
5.2 mytool에 부속 명령을 지정하지 않고 실행
하기를 코피페.
txt:コマンド(コマンドプロンプトで実行)
%GOPATH\bin\mytool
템플릿 상태에서 도움말 메시지가 출력되었습니다! !
실행 결과
%WS%\src\mytool>%GOPATH%\bin\mytool
A longer description that spans multiple lines and likely contains
examples and usage of using your application. For example:
Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.
Usage:
mytool [command]
Available Commands:
hello A brief description of your command
help Help about any command
Flags:
--config string config file (default is $HOME/.mytool.yaml)
-h, --help help for mytool
-t, --toggle Help message for toggle
Use "mytool [command] --help" for more information about a command.
6. 폴더 구성
여기까지 폴더 구성은 아래와 같이 되어 있을 것.
※ 패키지류는 생략하고 있습니다
폴더 구성
├─bin
│ cobra.exe
│ mytool.exe
│
├─pkg
│
└─src
│
└─mytool
│ LICENSE
│ main.go
│
└─cmd
hello.go ★サブコマンドの実装はこのファイル
root.go
7. hello.go를 수정합니다.
샘플 CLI 앱 mytool 사양에 맞게 hello.go를 수정합니다.
수정 전
// helloCmd represents the hello command
var helloCmd = &cobra.Command{
Use: "hello",
Short: "A brief description of your command",
Long: `A longer description that spans multiple lines and likely contains examples
and usage of using your command. For example:
Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.`,
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("hello called")
},
}
수정하는 것은 ★의 1행만.
수정 후
// helloCmd represents the hello command
var helloCmd = &cobra.Command{
Use: "hello",
Short: "A brief description of your command",
Long: `A longer description that spans multiple lines and likely contains examples
and usage of using your command. For example:
Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.`,
Run: func(cmd *cobra.Command, args []string) {
fmt.Printf("Hello, %s !!", args[0]) ★ここを修正
},
}
빌드 & 실행해 보자.
하기를 코피페.
명령 (명령 프롬프트에서 실행)
go install mytool
%GOPATH\bin\mytool hello keita69sawada
할 수 있었다! !
실행 결과
%WS%\go-cobra>%GOPATH%\bin\mytool hello keita69sawada
Hello, keita69sawada !!
요약
아직 간단한 사용 밖에 할 수 없지만, 도움말이 포함된 템플릿이 바삭바삭 만들 수 있는 곳 마음에 들었습니다.
복수인으로 프로그램 실장하는 경우도, A씨는 XXX 서브 커맨드, B씨는 YYY 서브 커맨드, C씨는 ZZZ 서브 커맨드로서도 공통의 베이스 코드가 있으면 속인적인 사양이 되지 않고 안심이군요.
JSON이나 YAML에 의한 설정 파일을 간단하게 취급하는 기능을 사용하고 있지 않기 때문에, 기회가 있으면 놀아 보려고 생각합니다.
참고 URL
htps : // 코 m / 켄 t_ 오세안 / ms / 에 b518c0816 어 d69f353
Reference
이 문제에 관하여(Java 프로그래머가 Go 언어를 만져 보았다 (cobra로 CLI를 만들어 보았다)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/keita69sawada/items/ef71f766819c829a28af텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)