Skip to content

Go 코드를 작성하는 방법

Donghyun Yun edited this page Jan 24, 2017 · 9 revisions

https://golang.org/doc/code.html 문서를 번역한 한글 문서 입니다.

소개

이 문서는 간단한 Go 패키지의 개발과 Go 패키지와 Command를 가져와 빌드하고, 설치하는 표준적인 방법 인 go tool 을 소개합니다.

go tool을 사용하려면 코드를 특정한 방식으로 구조를 잡아야합니다. 이 문서를 주의 깊게 읽으십시오. Go를 준비하고 실행하는 가장 간단한 방법을 설명합니다.

비슷한 설명이 screencast로 제공됩니다.

코드 구조

개요

  • Go 프로그래머들은 전형적으로 모든 Go 코드를 단일 workspace에서 관리 합니다.
  • 하나의 workspace에는 다수의 버전 관리 저장소(예: Git으로 관리되는)들을 포함합니다.
  • 각 저장소는 하나 이상의 패키지들이 있습니다.
  • 각 패키지는 단일 디렉토리 내에 하나 이상의 Go 소스 파일들로 구성됩니다.
  • 패키지의 디렉토리 경로 자체가 import 경로를 결정 합니다.

이는 프로젝트마다 별도의 workspace 가 있고, 이 workspace가 버전 관리 저장소에 밀접하게 연결된 다른 프로그래밍 환경들과는 다릅니다.

Workspace

Workspace는 세 개의 하위 디렉토리가 있는 디렉토리 계층 구조입니다.

  • src 에는 Go 소스 파일들이 있으며,
  • pkg 에는 패키지 객체들이 있으며,
  • bin 에는 실행 가능한 커멘드들이 들어 있습니다.

go tool은 소스 패키지를 빌드하고 결과 바이너리들을 pkgbin 디렉토리에 설치합니다.

src 서브 디렉토리는 일반적으로 하나 이상의 소스 패키지의 개발을 관리하는 여러 버전 관리 저장소(Git 또는 Mercurial과 같은)들을 포함합니다.

실제로 작업 공간이 어떻게 보이는지 알려주기 위해 다음과 같은 예가 있습니다:

bin/
    hello                          # command 실행 프로그램
    outyet                         # command 실행 프로그램
pkg/
    linux_amd64/
        github.com/golang/example/
            stringutil.a           # 패키지 객체
src/
    github.com/golang/example/
        .git/                      # Git 저장소 메타 데이터
    hello/
        hello.go               # command 소스
    outyet/
        main.go                # command 소스
        main_test.go           # 테스트 소스
    stringutil/
        reverse.go             # 패키지 소스
        reverse_test.go        # 테스트 소스
    golang.org/x/image/
        .git/                      # Git 저장소 메타 데이터
    bmp/
        reader.go              # 패키지 소스
        writer.go              # 패키지 소스
    ... (많은 저장소와 패키지들이 생략 됨) ...

위의 트리 구조는 두 개의 저장소(exampleimage)가 포함 된 workspace를 보여줍니다. example 저장소는 두 개의 command(hellooutyet)와 하나의 라이브러리(stringutil)를 포함합니다. image 저장소는 bmp 패키지와 몇몇 다른 것들을 포함합니다.

일반적인 workspace에는 많은 패키지와 command들이 들어있는 많은 소스 저장소가 있습니다. 대부분의 Go 프로그래머들은 모든 Go 소스 코드와 필요한 라이브러리들을 단일 workspace에서 관리합니다.

Command 및 라이브러리는 다양한 종류의 소스 패키지로부터 빌드됩니다. 우리는 나중에 그 구분 방식(패키지 이름)을 이야기 할 것입니다.

GOPATH 환경 변수

GOPATH 환경 변수는 workspace 의 위치를 ​​지정합니다. 아마도 Go 코드를 개발할 때 설정해야 할 유일한 환경 변수 일 것입니다.

먼저, workspace 디렉토리를 만들고 아래처럼 GOPATH를 설정하십시오. workspace는 원하는 위치 어디든 가능하지만, 이 문서에서는 $HOME/work 를 사용합니다. 이 경로는 Go 배포판이 설치된 경로와 같아서는 안됩니다.(또 다른 일반적인 설정은 GOPATH=$HOME로 지정하는 방식이 있습니다.)

$ mkdir $HOME/work
$ export GOPATH=$HOME/work

편의상 workspace의 bin 하위 디렉토리를 PATH에 추가:

$ export PATH=$PATH:$GOPATH/bin

GOPATH 환경 변수 설정에 대한 자세한 설명은 go help gopath을 참조하십시오.

Import 경로 import 경로는 패키지를 고유하게 식별하는 문자열입니다. 패키지의 import 경로는 workspace 또는 원격 저장소 내에서의 위치를 따릅니다(아래 설명 참조).

표준 라이브러리의 패키지에는 "fmt" 및 "net/http" 와 같은 짧은 import 경로가 지원됩니다. 직접 만든 자신의 패키지의 경우, 표준 라이브러리 나 다른 외부 라이브러리와 추후 충돌날 가능성이 없는 베이스 경로를 선택해야합니다.

코드를 어딘가에 소스 저장소에 보관하면 해당 소스 저장소의 root를 기본 경로로 사용해야합니다. 예를 들어, github.com/user GitHub 계정을 가지고 있다면 이것을 베이스 경로로 써야합니다.

코드를 빌드하기 전에 원격 저장소에 코드를 배포 할 필요는 없습니다. 언젠가 배포 할 것처럼 코드를 구성하는 것은 단지 좋은 습관일 뿐입니다. 실질적으로는 표준 라이브러리와 커다란 Go 생태계에서 고유하기만 하다면, 어떤 임의의 경로 이름도 선택할 수 있습니다.

여기서는 github.com/user 를 기본 경로로 사용합니다. 소스 코드를 보관할 workspace 내부에 디렉토리를 만듭니다:

$ mkdir -p $GOPATH/src/github.com/user

여러분의 첫 번째 프로그램

간단한 프로그램을 컴파일하고 실행하기 위해, 먼저 패키지 경로(github.com/user/hello 사용)를 선택하고, workspace 내에 해당 패키지 디렉토리를 만듭니다.

$ mkdir $GOPATH/src/github.com/user/hello

다음으로, 아래의 Go 코드가 포함 된 hello.go 라는 파일을 해당 디랙토리 내에 작성하십시오.

package main

import "fmt"

func main() {
    fmt.Printf("Hello, world.\n")
}

이제 go tool 을 이용해 빌드하고 설치할 수 있습니다.

$ go install github.com/user/hello

시스템의 어느 곳에서나 해당 프로그램(command)를 실행할 수 있습니다. go tool은 GOPATH로 지정된 workspace에서 github.com/user/hello 패키지를 검색하여 소스 코드를 찾습니다.

package 디렉토리에서 go install을 실행하면 패키지 경로는 생략 할 수 있습니다.

$ cd $GOPATH/src/github.com/user/hello
$ go install
Clone this wiki locally