Kubernetes 이야기

cobra library 사용법 본문

개발/go

cobra library 사용법

kmaster 2022. 8. 22. 20:22
반응형

Cobra는 강력한 최신 CLI 애플리케이션을 만들기 위한 라이브러리이다.

 

https://github.com/spf13/cobra

 

GitHub - spf13/cobra: A Commander for modern Go CLI interactions

A Commander for modern Go CLI interactions. Contribute to spf13/cobra development by creating an account on GitHub.

github.com

 

github 소개에는 다음과 같이 코브라를 소개하고 있다.

  • 쉬운 하위 명령 기반 CLI: app server, app fetch등
  • 완전히 POSIX 호환 플래그(짧고 긴 버전 포함)
  • 중첩된 하위 명령
  • 전역, 지역 및 계단식 플래그
  • 지능 적인 app srver제안app server
  • 명령 및 플래그에 대한 자동 도움말 생성
  • -h, --help등 의 자동 도움말 플래그 인식
  • 애플리케이션에 대해 자동으로 생성된 셸 자동 완성(bash, zsh, fish, powershell)
  • 애플리케이션에 대해 자동으로 생성된 매뉴얼 페이지
  • 명령 별칭을 사용하면 깨지지 않고 변경할 수 있습니다.
  • 자신의 도움말, 사용법 등을 정의할 수 있는 유연성
  • 12단계 앱용 viper 와의 원활한 통합(선택 사항 )

 

설치

# go get -u github.com/spf13/cobra@latest
go: downloading github.com/spf13/pflag v1.0.5
go: downloading github.com/inconshreveable/mousetrap v1.0.0
go: downloading github.com/inconshreveable/mousetrap v1.0.1
go: added github.com/inconshreveable/mousetrap v1.0.1
go: added github.com/spf13/cobra v1.5.0
go: added github.com/spf13/pflag v1.0.5

 

기본적인 cobra 파일 구조는 아래와 같다.

 

main.go
     cmd/
            root.go

 

main.go 를 살펴보면 아래와 같다.

package main

import (
  "{pathToYourApp}/cmd"
)

func main() {
  cmd.Execute()
}

root.go 파일의 중요한 내용은 아래와 같다.

package cmd

import (
	"fmt"
	"os"

	"github.com/spf13/cobra"
)

var rootCmd = &cobra.Command{
  Use:   "demo",
  Short: "demo app to demonstrate cobra",
  Long: `demo app to demonstrate cobra by addition`
}

func Execute() {
  if err := rootCmd.Execute(); err != nil {
    fmt.Println(err)
    os.Exit(1)
  }
}

 

이제 실행을 해보자.

# go run main.go
demo app to demonstrate cobra by addition

 

추가적으로 version 정보를 출력하는 command 를 추가해 보자.

version.go

package cmd

import (
	"fmt"

	"github.com/spf13/cobra"
)

func init() {
	rootCmd.AddCommand(versionCmd)
}

var versionCmd = &cobra.Command{
	Use:   "version",
	Short: "Print the version number of demo",
	Long:  `All software has versions. This is Demo`,
	Run: func(cmd *cobra.Command, args []string) {
		fmt.Println("Demo v1.0")
	},
}

 

이제 다시한번 실행해 보자.

# go run main.go 
demo app to demonstrate cobra by addition

Usage:
  demo [command]

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  help        Help about any command
  version     Print the version number of demo

Flags:
  -h, --help   help for demo

Use "demo [command] --help" for more information about a command.
# go run main.go  version
Demo v1.0

 

add command 를 추가해보자.

add.go

package cmd

import (
    "fmt"
    "strconv"
    "github.com/spf13/cobra"
)

func init() {
    rootCmd.AddCommand(add)
}

var addCmd = &cobra.Command{
    Use:   "add",
    Short: "add values passed to function",
    Long: `Demo application to demonstrate cobra featues`,
    Run: func(cmd *cobra.Command, args []string) {
        sum := 0
        for _ , args := range args {
            num, err :=  strconv.Atoi(args)
        
        if err != nil {
            fmt.Println(err)
        }
        sum = sum + num
    }
        fmt.Println("result of addition is", sum)
    },
}

 

추가한 후 다시 실행해 보자. add command 가 추가된 것을 볼 수 있다.

# go run main.go  
demo app to demonstrate cobra by addition

Usage:
  demo [command]

Available Commands:
  add         add values passed to function
  completion  Generate the autocompletion script for the specified shell
  help        Help about any command
  version     Print the version number of demo

Flags:
  -h, --help   help for demo

Use "demo [command] --help" for more information about a command.

실행결과

# go run main.go  add 1 2 3
result of addition is 6
반응형

'개발 > go' 카테고리의 다른 글

GoDS ( Go Data Structures )  (0) 2022.08.24
Viper  (0) 2022.08.23
모둘과 패키지  (0) 2022.08.22
Kubebuilder ( Kubernetes operator )  (0) 2022.08.17
Golang - Gin Framework  (0) 2022.08.08
Comments