Java 프로그래머가 Go 언어를 만져 보았다 (cobra로 CLI를 만들어 보았다)



모두 keita69sawada입니다.

Go 언어로 "CLI를 만들 때 좋은 패키지가 없을까?"라고 찾아 보면 cobra을 찾았습니다.

그럼, 「cobra에 대해 조사해 볼까!」라고
성게는이 기사입니다.

대상 독자


  • Go 언어로 CLI를 만드는 사람.

  • 전제 조건


  • windows10 (home)의 환경
  • golang이 설치되었습니다

  • ※ 환경은 chocolatey 에서의 셋업을 추천. 여기 참조

    소개



    cobra는 무엇을 할 수 있는가?


  • 템플리트 자동 생성 도구 cobra/cobra
  • 제공된 패키지를 사용하여 쉽게 CLI 앱을 만들 수 있습니다.
  • 또한, JSON이나 YAML 에 의한 설정 파일을 간단하게 취급하기 위한 패키지 viper 와의 궁합도 좋습니다.

  • 절차



    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


  • CLI 작성 지원 패키지 Cobra를 사용해 Go 언어로 커맨드 라인 툴을 만들어 보기
    htps : // 코 m / 켄 t_ 오세안 / ms / 에 b518c0816 어 d69f353
  • 좋은 웹페이지 즐겨찾기