ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • golang cobra
    Language/Golang 2023. 1. 27. 18:30
    728x90
    반응형

     

    golang init

    go 파일은 init 함수를 가집니다.
    init 함수는 인자와 반환값이 없는 구조이며 이름 그대로 go 파일의 기능과 데이터를 초기화시키는 내용을 담습니다.

    이렇게 작성된 init 함수는 다른 코드 영역에서 해당 패키지가 사용될 때 호출이 됩니다.
    init 함수를 가진 go 파일의 패키지가 import 될때가 그 시점인 것이죠.

    그래서 라이프사이클 관점에서 봤을 때, 의존 관계에 있는 패키지들은 연쇄적으로 init 이 호출됩니다.

    하지만 하나의 패키지에는 여러개의 go 파일들이 있고, 각 파일마다 init 함수를 가질 수 있습니다. 즉, 보통 한 패키지가 하나의 파일만을 가지지 않기 때문에 패키지 import 시에 여러 go 파일의 init이 실행됩니다.

    다만 go 파일마다 init 호출의 순서는 보장되진 않습니다. 알파벳 순서대로 호출이 되기때문에 init 의 순서가 중요하다면 파일명 작명에 유의해야합니다.


    cobra generator

    cobra 의 구성을 세팅하기 위한 cli입니다.
    go get 명령어로 cobra dependency 를 설치한 이후에 cobra generator cli 의 사용이 가능해집니다.


    cobra init

    cobra 프로젝트를 생성합니다.
    원하는 디렉토리 세팅 후, 해당 위치에서 init 명령어를 실행합니다.



    mkdir cobra_project
    cd cobra_project
    cobra init

     

    cobra add

    cobra add read

    위 명령어는 read 라는 cobra command 를 추가하는 cli입니다.

    cobra init 의 결과로 생성된 프로젝트는 기본적으로 cmd 패키지는 가지는데요.
    그 패키지 내부로 명령어 파일이 생성됩니다.

    명령어 파일은 cobra command 형식에 맞는 boilerplate code 를 가지는데, 해당 코드 내용을 자동으로 추가해줍니다.


    Command

    rootCmd = &cobra.Command{
    		Use:   "cobra-cli",
    		Short: "A generator for Cobra based Applications",
    		Long: `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.`,
    	}
    

    cobra command 는 Command 구조체들로 구성됩니다.
    먼저 rootCmd 라는 Command 객체로부터 시작이 되는데요.

    와 같은 형식으로 구성됩니다.

    아래 예시는 version 이라는 이름의 커맨드 생성을 위한 예시입니다.
    구조체의 구성 중
    Short 와 Long 을 커맨드의 설명을 위한 문자열이며,
    Use 가 해당 cobra command 를 실행하기 위한 커맨드 명이며,
    Run 에 작성된 코드는 사용자의 cli 입력에 의해 실행되는 실질적인 실행 내용입니다.

    &cobra.Command{
      Use:   "version",
      Short: "Print the version number of Hugo",
      Long:  `All software has versions. This is Hugo's`,
      Run: func(cmd *cobra.Command, args []string) {
        fmt.Println("Hugo Static Site Generator v0.9 -- HEAD")
      },
    }



    flag 패키지

     

    반응형

    'Language > Golang' 카테고리의 다른 글

    golang package 이해하기  (2) 2023.09.18
    golang struct 이해하기  (0) 2023.09.18
    Go-modules  (0) 2022.04.15
    [Sarama] Sarama 로 Kafka Producer 만들어보기 ( Golang )  (0) 2021.12.04
Designed by Tistory.