갈루아의 반서재

Workspace

작업공간은 Git 등에 의해 관리되는 다수의 버전 관리 저장소를 포함하고 있다. 각각의 저장소는 하나 이상의 패키지를 포함하고 있으며, 각각의 패키지는 단일 디렉토리에 하나 이상의 Go 소스파일로 구성된다. 

패키지 디렉토리 경로에 따라 import 경로가 정해진다. 

특히 이 점이 프로젝트별로 별도의 작업공간을 갖게 되는 여타 프로그래밍 환경과 다른 점이다. 그리고 작업공간은 버전 관리 저장소와 밀접히 연계되어 있다. 

작업공간은 최상단에 3개의 디렉토리를 가진 디렉토리 계층구조를 말한다. 

  • src 에는 Go 소스 파일이 들어있다.
  • pkg 디렉토리에는 패키지 객체를 포함한다.
  • bin 디렉토리에는 실행가능한 명령어가 포함되어 있다.

go tool 은 소스 패키지를 빌드하고, 결과물인 바이너리를 패키지와 bin 디렉토리에 설치한다. src 서브디렉토리는 보통 Git 또는 Mercurial 등 다수의 버전 관리 저장소를 포함하고 있다. 이해를 돕기 위해 다음의 예를 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
bin/
    hello                          # command executable
    outyet                         # command executable
pkg/
    linux_amd64/
        github.com/golang/example/
            stringutil.a           # package object
src/
    github.com/golang/example/
        .git/                      # Git repository metadata
    hello/
        hello.go               # command source
    outyet/
        main.go                # command source
        main_test.go           # test source
    stringutil/
        reverse.go             # package source
        reverse_test.go        # test source
    golang.org/x/image/
        .git/                      # Git repository metadata
    bmp/
        reader.go              # package source
        writer.go              # package source
    ... (many more repositories and packages omitted) ...
cs

위의 트리가 보여주듯이 상기 작업공간은 2개의 저장소 example과 image를 포함하고 있다. example 저장소는 2개의 명령어 hello와 outyet를 가지고, 1개의 라이브러리 stringutil을 가진다. image 저장소는 bmp 패키지와 기타를 포함하고 있다.

전형적인 작업공간은 다수의 패키지와 명령어를 포함하는 다수의 소스 저장소를 가진다. 그리고 Go 프로그래머는 모든 Go 소스코드와 의존성을 하나의 작업공간에서 관리한다. 

명령어와 라이브러리는 서로 다른 종류의 소스 패키지로부터 생성될 수 있다. 이에 대해서는 뒤에서 다룬다. 


The GOPATH environment variable

GOPATH 환경변수는 작업공간의 위치를 정의한다. 기본적으로는 홈 디렉토리내의 go 디렉토리가 될 것이다. 그러니깐, UNIX의 경우에는 $HOME/go , 그리고 윈도우의 경우에는 %USERPROFILE%\go (보통 C:\Users\YourName\go) 이 된다. 그리고 GOPATH 는 Go 설치 경로와 동일해서는 안된다. 

go env GOPATH 명령어는 현재의 GOPATH 를 출력해준다. 

1
2
# go env GOPATH
/root/go
cs

편의상, 작업공간의 bin 디렉토리를 PATH 에 추가할 수도 있다.

1
$ export PATH=$PATH:$(go env GOPATH)/bin
cs

GOPATH 환경변수에 대해 더 알고 싶다면, 아래와 같이 go help gopath 명령을 활용한다.

1
2
# go help gopath
 
cs

사용자 정의 작업공간을 사용하고 싶으며, GOPATH 환경 변수를 설정해야 한다.


Import paths ¶

import path 는 패키지를 지정하는 문자열을 말하는 것으로,패키지의 import path 는 작업공간내이나 원격 저장소의 패키지의 위치에 대응한다. 표준 라이브러리의 패키지의 경우는 "fmt" 나 "net/http"와 같이 축약된 이름을 갖는다. 사용자 정의 패키지의 경우 표준 라이브러리 등의 패키지와 충돌하지 않도록 이름을 정의할 필요가 있다.