Good Day

[Golang] 4. Workspace와 Hello World 본문

개발/Go

[Golang] 4. Workspace와 Hello World

영악 2015. 9. 29. 18:15

오늘 할 이야기는 Workspace와 폴더 구조에 대해 말하려고 합니다.

저는 이 부분에 대해 되게 오랜시간(근 1주일 넘게) 고민을 했었는데요, 의외로 별거 없더라구요 하하...


아무래도 저처럼 아예 폴더 구조에 큰 영향이 없는 언어(PHP)가 익숙하시거나 기본 폴더 트리를 만들어주는(C#+VS) 환경에서 개발을 하셨으면 좀 헷깔리실 가능성이 높습니다.

이 부분에 관련해서 별도로 설명된 한글 문서도 없고... 영문 공식 문서 보다가 이건가!? 싶었다가 개발 테스트하면서 이거구나!! 싶었습니다.


뭐 대략 저런 고민의 시간을 거치고 이해한 정보를 적어놓으니 잘못된 정보면 정정을 요청해주시길 바랍니다.


1. Workspace 개념


기본적으로 개발자분들은 Workspace에 대해서는 대부분 이해하고 계실 것으로 판단하고 있습니다.

약간 다른건 이클립스에서 만드는 Workspace랑은 살짝 개념이 다른 것 같습니다.

제가 알고있는 바를 정리하자면 이런 차이를 가지고 있습니다.

  • 이클립스: 각각의 프로젝트를 모아놓는 Root 폴더
  • Go: 프로젝트 폴더(사실 여러가지 프로젝트를 몰아놓고 할 수 있겠지만 폴더구조 자체가 좀 차이가 나는 것 같습니다.)

조금 신기한 부분은 Go에서는 폴더를 생성한다고 그곳에서 빌드하고 실행이 자유로운게 아니라는 것입니다.

Workspace 생성하고 GOPATH를 선언해줘야 정상적으로 빌드하고 실행할 수 있습니다.

(실제로 빌드를 할 수는 있으나, 인스톨 커맨드 시 에러를 뿜습니다.)


쉽게 설명하자면 GOPATH 환경변수는 워크스페이스위치를 지정해주는 것입니다. 개발될 소스가 들어갈 곳이자, 라이브러리를 설치할 위치가 되는 것입니다.

결과적으로 GOPATH로 워크스페이스를 설정해주지 않는다면 아주 주옥되는겁니다 네.


GOPATH 설정은 아래와 같이 잡으시면 됩니다.

  1. Windows: [내컴퓨터-속성- 고급시스템속성 - 시스템속성 - 환경변수 - (사용자 or 시스템) 변수"새로 만들기" - 이름 "GOPATH" - 경로: "워크스페이스 경로"
  2. Linux: export GOPATH=워크스페이스 경로


2. Workspace 구성


 우리는 이 과정을 통해 기초적인 Hello World! 프로젝트를 생성해볼 것입니다.

※ 먼저 저는 편의상 개발용 드라이브 루트에 GoStudy폴더를 (D:\GoStudy) 생성했습니다. 앞으로 모든 설명은 저 폴더를 기준으로 작성될 것입니다.

※ LiteIDE로 프로젝트를 생성해도 무방하지만, 다른분들도 같이 진행하실 수 있게 직접 폴더를 만들면서 진행하겠습니다.


  • Workspace: D:\GoStudy\HelloWorld
  • GOPATH: D:\GoStudy\HelloWorld


  • 위의 이미지와 같이 폴더를 생성하고 그 구조에 대해서 설명하자면 우측 이미지와 같다,

    사실 각 폴더들은 궂이 만들어가면서 작업하지 않아도 괜찮지만, 표준 프레임워크를 따라 개발한다면 가능한한 맞추는게 중요하다.


    더불어 bin폴더와 pkg폴더는 컴파일시 자동으로 생성되므로 가능하다면 src폴더만 신경써도 무방하다.

    앞서말한 두개의 폴더(bin/pkg)와 다르게 src는 직접 생성해서 구성해야 하고, 하위 폴더로는 1pkg per dir로 각 패키지당 1폴더씩 운영해야한다.


    ex. /src/[파키지A]/[소스.go]

        /src/[파키지B]/[소스.go]

        /src/[파키지B]/[소스2.go]



    3. main.go 작성


    // main.go
    package main

    import (
        "fmt"
    )

    func main() {
        fmt.Println("Hello World!")
    }


    4. Build와 Install


    Build는 말 그대로 빌드를 진행해보는 것이며, 특정 소스를 빌드하면 타입에 따라 exe파일을 같은 폴더에 생성해줍니다.

    예를들어 우리가 지금 main.go파일을 빌드하면 go파일과 같은 폴더(/src/helloworld/main.exe)에 [소스파일명.exe]로 빌드됩니다.


    아직까진 제대로 개념이 안스긴 했는데 대략적으로 판단해보면 Build는 Debug를 위해 특정 소스를 빌드해보는 작업이고, Install은 실제로 연관있는 코드를 컴파일하거나 설치하는 작업으로 판단이 되네요.


    작업해본 결과 패키지 파일을 만들었다면 go build 커맨드로 진행시 다른 output이 나오지 않으나,

    go install을 통해 컴파일을 하면 /pkg/폴더 밑에 플랫폼에 맞춰서 설치되는 것을 확인할 수 있습니다.


    우리는 어차피 Hello World!가 목적입니다만,

    이왕이면 두개의 차이를 확인해봅시다.


    1) Build



    > cd d:

    > cd D:\GoStudy\HelloWorld\src\helloworld\

    > go build main.go

    > main.exe <------------- 같은 폴더에 소스이름으로 exe파일 생성

    "Hello World!"


    2) Install



    > cd d:

    > cd D:\GoStudy\HelloWorld\src\helloworld\

    > go install

    cd D:\GoStudy\HelloWorld\bin

    > helloworld.exe <------------- bin 폴더에 패키지 이름으로 exe파일 생성

    "Hello World!"


    끝.


    '개발 > Go' 카테고리의 다른 글

    [Golang] T01. Tip 모음  (0) 2015.09.30
    [Golang] 3. IDE 설치  (0) 2015.09.25
    [Golang] 2. 설치  (0) 2015.09.25
    [Golang] 1. 도입 배경과 의사 결정  (0) 2015.09.18
    Comments