Skip to content
This repository has been archived by the owner on May 13, 2024. It is now read-only.

튜토리얼: Go 모듈 생성하기

김원욱 edited this page Sep 25, 2023 · 6 revisions

튜토리얼: Go 모듈 생성하기

원본

이 문서는 Go 언어의 일부 기본 기능들에 대한 소개의 첫번째 파트입니다. 만약 Go가 처음이라면 Go 커맨드, 모듈, 간단한 Go 코드에 대한 소개를 하는 튜토리얼: Go 시작하기를 살펴보세요.

이 튜토리얼에서 당신은 두 개의 모듈을 만들것입니다. 첫번째는 다른 라이브러리나 어플리케이션에서 import할 수 있는 라이브러리이고, 두번째는 첫번째 모듈을 사용하는 호출 어플리케이션입니다.

이 튜토리얼은 Go 언어의 각각의 다른 파트를 표현하는 7가지의 간단한 주제를 포함합니다.

  1. Go 모듈 생성하기 -- 다른 모듈에서 호출할 수 있는 함수들을 가진 작은 모듈을 만듭니다.
  2. 다른 모듈에서 코드 호출하기 -- 당신의 모듈을 import하고 사용합니다.
  3. 에러 반환과 처리 -- 간단한 에러 처리를 추가합니다.
  4. 랜덤한 인사 반환하기 -- 슬라이스(Go의 동적 크기의 배열)의 데이터를 처리합니다.
  5. 여러 사람들을 위한 랜덤한 인사 반환하기 -- map에 키-값 쌍을 저장합니다.
  6. 테스트 추가하기 -- Go의 내장 유닛테스트 기능을 사용하여 코드를 테스트합니다.
  7. 어플리케이션 컴파일과 설치 -- 코드를 컴파일하고 로컬에 설치합니다.

주의: 다른 튜토리얼을 찾으시면 튜토리얼을 참고하세요.

전제 조건

  • 프로그래밍 경험 조금. 이곳의 코드들은 꽤 쉬운 편이지만 경험이 조금 있으면 함수들을 이해하기 쉬울 것입니다.
  • 코드를 작성할 도구. 아무 텍스트 편집기나 써도 좋습니다. 대부분의 텍스트 편집기는 Go를 잘 지원해줍니다. 인기있는 것들은 VSCode (무료), GoLand (유료), 그리고 Vim (유료)이 있습니다.
  • 커맨드 터미널. Go는 Linux, Mac에서는 아무 터미널, Windows에서는 PowerShell, cmd 등의 터미널에서 잘 작동합니다.

다른 모듈이 호출할 수 있는 새로운 모듈 만들기

Go 모듈을 만드는 것으로 시작합니다. 모듈 안에서, 당신은 분리되었으면서도 유용한 함수들의 집합을 가진 패키지를 하나 이상 만들 것입니다. 예를 들어, 당신은 재무분석을 하는 함수들을 가진 패키지들이 있는 모듈을 만들어 재무 관련 어플리케이션을 작성하는 다른 사람들이 쓸 수 있도록 만들 수 있습니다. 모듈을 개발하는 것에 대해 더 알고싶다면, 모듈 개발과 배포를 확인하세요.

Go 코드는 패키지로 그룹화됩니다. 그리고 패키지는 모듈로 그룹화됩니다. 모듈은 당신의 코드를 돌리기 위한 Go 버전과 필요한 다른 모듈의 집합과 같은 의존성을 정의합니다.

기능을 추가하거나 개선하면, 당신은 새로운 버전의 모듈을 배포할 것입니다. 당신의 모듈의 함수를 호출하는 코드를 작성하는 개발자들은 프로덕션 환경에서 사용하기 전에 업데이트된 버전의 모듈을 import하고 테스트할 것입니다.

  1. 커맨드 프롬프트를 열어서 당신의 home 디렉터리로 이동( cd )하세요.

    Linux나 Mac:

    cd
    

    Windows:

    cd %HOMEPATH%
    
  2. 소스코드를 위한 greetings 디렉터리를 만드세요.

    예를 들어, home 디렉터리에서 아래와 같은 커맨드를 사용하세요.

    mkdir greetings
    cd greetings
    
  3. go mod init 커맨드를 사용하여 새로운 모듈을 만드세요.

    go mod init 커맨드를 당신의 모듈 경로와 함께 실행합니다. 여기서는 example.com/greetings를 사용합니다. 당신이 모듈을 배포한다면, 경로는 Go tools를 통해 모듈을 다운로드할 수 있는 경로여야 합니다. 당신의 코드 레포지터리도 해당될 수 있습니다.

    당신의 모듈의 경로를 설정하는 것에 대해서 더 알고싶다면, 의존성 관리를 참고하세요.

    $ go mod init example.com/greetings
    go: creating new go.mod: module example.com/greetings
    

    go mod init 커맨드는 go.mod파일을 만들어 의존성을 관리할 것입니다. go.mod파일은 당장은 당신의 모듈 이름과 코드의 Go 버전만을 명시하고 있을 것입니다. 하지만 당신이 의존성을 추가한다면, go.mod파일은 당신의 코드가 의존하는 버전들을 나열할 것입니다. 이것은 빌드를 재사용 가능한 빌드를 만들 수 있게 만들어주고 어떤 모듈 버전을 쓸지 직접 정할 수 있게 해줍니다.

  4. greetings.go 파일을 만드세요.

  5. 아래 코드를 greetings.go 파일에 붙여넣고 저장하세요.

    package greetings
    
    import "fmt"
    
    // Hello returns a greeting for the named person.
    func Hello(name string) string {
        // Return a greeting that embeds the name in a message.
        message := fmt.Sprintf("Hi, %v. Welcome!", name)
        return message
    }

    이 코드는 호출자에게 인사를 반환해주는 코드입니다. 다음 스텝에서 이 코드의 호출부를 만들 것입니다.

    이 코드에서는:

    • greetings 패키지를 정의하여 서로 비슷한 함수를 모을 것입니다.

    • Hello 함수를 구현하여 인사를 반환합니다.

      이 함수는 string 타입의 name 매개변수를 받습니다. 또한 이 함수는 string을 반환할 것입니다. Go에서는, 대문자로 시작하는 함수는 다른 패키지에서 호출할 수 있는 함수입니다. 이것은 Go에서 exported name이라고 알려져 있습니다. exported name에 대해 알고싶다면, Go 투어의 Exported names를 참고하세요.

      함수 문법

    • message 변수를 선언하여 인사를 담을 공간을 마련합니다.

      Go에서는 := 연산자는 변수를 정의하고 초기화하는 숏컷입니다(Go는 변수의 오른쪽에 타입을 지정할 수 있습니다). 풀어서 작성하면 아래와 같을 것입니다:

      var message string
      message = fmt.Sprintf("Hi, %v. Welcome!", name)
    • fmt패키지의 Sprintf 함수를 이용하여 인사를 만들어냅니다. 첫 번째 인수는 string의 포맷입니다. Sprintf 함수는 포맷의 %v를 name 인수의 값으로 대체합니다.

    • 포맷 된 텍스트를 호출자에게 반환합니다.

다음 스텝에서는 이 함수를 다른 모듈에서 호출할 것입니다. 다른 모듈에서 코드 호출하기