docker에서도 사용되고 있는 「spf13/cobra」를 사용해 CLI를 작성해 보았다
구현에 사용한 「 cspf13/cobra 」는, CLI 작성용 패키지입니다. 이것은 "도커"등에서도 사용되고 있는 매우 편리한 패키지로 간단하게 CLI를 작성할 수 있습니다.
작성한 CLI는 지정된 문자열을 포함하는 행이나 문자열을 색칠하거나 굵은 글씨와 기울임 꼴로 만듭니다.
키스트를 보기 쉽게 하기 위한 것입니다.
지정된 문자열을 포함하는 행을 표시
행 번호를 지정하여 표시
작성한 CLI는 htps : // 기주 b. 코 m / x - 코 r / mkr에 놓여 있으므로 자유롭게 사용하십시오.
이하에서는, 작성시에 막힌 플래그의 소트나, 전회 사용한 「 urfave/cli 」보다 편하게 할 수 있는 설정 파일 관련의 구현 부분등을 소개해 갑니다.
플래그 정렬 기능 끄기
작성시 조금 곤란한 점은 플래그의 정렬 기능이 기본적으로 켜져 있다는 것입니다.
이렇게하면 플래그 그룹을 따라 표시 순서를 결정할 수 없습니다.
표시 순서를 직접 결정하려면 이 정렬 기능을 꺼야 합니다.
다음과 같이 하면 꺼질 수 있습니다.
// サブコマンドにも継承されるフラグ(グローバルフラグ)のソートを無効にする
cmd.PersistentFlags().SortFlags = false
// 親コマンドから継承されたフラグ(グローバルフラグ)のソートを無効にする
cmd.InheritedFlags().SortFlags = false
// フラグの種類を混同したソートを無効にする
cmd.Flags().SortFlags = false
cmd.Flags().SortFlags = false
이해하기 어렵다고 생각합니다만, 이하의 예를 봐 주세요.
// 継承するフラグ
cmd.PersistentFlags().StringP("C-global", "C", "", "")
cmd.PersistentFlags().StringP("B-global", "B", "", "")
cmd.PersistentFlags().StringP("A-global", "A", "", "")
// 継承しないフラグ
cmd.Flags().StringP("C-local", "c", "", "")
cmd.Flags().StringP("B-local", "b", "", "")
cmd.Flags().StringP("A-local", "a", "", "")
준비했을 때,
cmd.Flags().SortFlags = true
로 설정하면 다음과 같이 표시됩니다.
명령 도움말 메시지Flags:
--A-global
--A-local
--B-global
--B-local
--C-global
--C-local
반대로
cmd.Flags().SortFlags = false
로 설정하면
명령 도움말 메시지Flags:
--A-global
--B-global
--C-global
--A-local
--B-local
--C-local
와 같이 표시됩니다.cmd.Flags().SortFlags = false
를 설정하는 것으로, 플래그의 종류 (계속하는 플래그인가 어떤가 등)가 혼합하는 것을 막아줍니다.
설정 파일을 사용하여 플래그의 초기 값 사용자 정의 기능 작성
「spf13/cobra」의 README내에서도 쓰여지고 있습니다만, 설정 파일 관련의 패키지인 「spf13/viper」를 이용하는 것으로 매우 간단하게 구현할 수 있습니다.
전에 사용한 패키지라고 상당히 고전했습니다만, 이번은 준비되어 있는 설정 파일용의 패키지가 강력하기 때문에 하고 싶은 것을 편하게 실장할 수 있었습니다.
// エラー処理などは省略
func readCfgFile(cfgFile string) {
viper.SetConfigFile(cfgFile)
viper.ReadInConfig()
}
이상의 코드만으로, cfgFile
내의 데이터를 읽어들여 viper
가 관리해 줍니다.
읽은 데이터는
viper.GetString("data")
등으로 읽을 수 있습니다.
명령 플래그의 초기 값을 외부 구성 파일에서 지정할 수 있도록하려면,
// viper内で管理している'data'に紐付いたデータとコマンドの'flag'フラグを紐付ける
viper.BindPFlag("data", cmd.Flags().Lookup("flag"))
data := viper.Get("data")
이렇게하면 런타임에 다음과 같이됩니다.
$ cmd
# data = 'cfgFile内で設定された値' (フラグを指定しない場合)
$ cmd --flag test-data
# data = 'test-data' (フラグを指定した場合)
이제 플래그의 초기 값을 외부 파일에서 사용자 정의할 수 있습니다.
참고로 한 사이트
명령 작성 일반
- "spf13/cobra"의 README
- "spf13/cobra"의 GoDoc
- "Golang 명령 라이브러리 cobra를 사용하여 약간 잘 구현 "
설정 파일에 관하여
- "spf13/viper"의 README
- "spf13/viper"의 GoDoc
정렬 온 오프에 관하여
- "spf13/pflag"의 GoDoc
Reference
이 문제에 관하여(docker에서도 사용되고 있는 「spf13/cobra」를 사용해 CLI를 작성해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/x-color/items/f7b03cb0970cae8f0d8a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// サブコマンドにも継承されるフラグ(グローバルフラグ)のソートを無効にする
cmd.PersistentFlags().SortFlags = false
// 親コマンドから継承されたフラグ(グローバルフラグ)のソートを無効にする
cmd.InheritedFlags().SortFlags = false
// フラグの種類を混同したソートを無効にする
cmd.Flags().SortFlags = false
// 継承するフラグ
cmd.PersistentFlags().StringP("C-global", "C", "", "")
cmd.PersistentFlags().StringP("B-global", "B", "", "")
cmd.PersistentFlags().StringP("A-global", "A", "", "")
// 継承しないフラグ
cmd.Flags().StringP("C-local", "c", "", "")
cmd.Flags().StringP("B-local", "b", "", "")
cmd.Flags().StringP("A-local", "a", "", "")
cmd.Flags().SortFlags = true
Flags:
--A-global
--A-local
--B-global
--B-local
--C-global
--C-local
cmd.Flags().SortFlags = false
Flags:
--A-global
--B-global
--C-global
--A-local
--B-local
--C-local
「spf13/cobra」의 README내에서도 쓰여지고 있습니다만, 설정 파일 관련의 패키지인 「spf13/viper」를 이용하는 것으로 매우 간단하게 구현할 수 있습니다.
전에 사용한 패키지라고 상당히 고전했습니다만, 이번은 준비되어 있는 설정 파일용의 패키지가 강력하기 때문에 하고 싶은 것을 편하게 실장할 수 있었습니다.
// エラー処理などは省略
func readCfgFile(cfgFile string) {
viper.SetConfigFile(cfgFile)
viper.ReadInConfig()
}
이상의 코드만으로,
cfgFile
내의 데이터를 읽어들여 viper
가 관리해 줍니다.읽은 데이터는
viper.GetString("data")
등으로 읽을 수 있습니다.
명령 플래그의 초기 값을 외부 구성 파일에서 지정할 수 있도록하려면,
// viper内で管理している'data'に紐付いたデータとコマンドの'flag'フラグを紐付ける
viper.BindPFlag("data", cmd.Flags().Lookup("flag"))
data := viper.Get("data")
이렇게하면 런타임에 다음과 같이됩니다.
$ cmd
# data = 'cfgFile内で設定された値' (フラグを指定しない場合)
$ cmd --flag test-data
# data = 'test-data' (フラグを指定した場合)
이제 플래그의 초기 값을 외부 파일에서 사용자 정의할 수 있습니다.
참고로 한 사이트
명령 작성 일반
- "spf13/cobra"의 README
- "spf13/cobra"의 GoDoc
- "Golang 명령 라이브러리 cobra를 사용하여 약간 잘 구현 "
설정 파일에 관하여
- "spf13/viper"의 README
- "spf13/viper"의 GoDoc
정렬 온 오프에 관하여
- "spf13/pflag"의 GoDoc
Reference
이 문제에 관하여(docker에서도 사용되고 있는 「spf13/cobra」를 사용해 CLI를 작성해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/x-color/items/f7b03cb0970cae8f0d8a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(docker에서도 사용되고 있는 「spf13/cobra」를 사용해 CLI를 작성해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/x-color/items/f7b03cb0970cae8f0d8a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)