본문 바로가기
자습

Go 언어 초보를 위한 Go Packages

by litaro 2020. 12. 19.

medium.com/rungo/everything-you-need-to-know-about-packages-in-go-b8bac62b74cc

 

Everything you need to know about Packages in Go

A complete overview of package management and deployment in Go programming language

medium.com

Go 초보자가 처음으로 접하는 것이 바로 golang.org/doc/#getting-started 일 것이다. 나도 따라하다 보니 packages 와 modules 이 중요해 보이는데 뭔가 머리에 구조가 잡히지 않는다. 그동안 뭐가 문제여서 Go modules 가 나온것인지도 모르겠고 말이다. 그래서 찾은 블로그~

해당 블로그는 Go modules 이 나오기 이전 시절의 개발 방법에 대해 얘기한다. 나 또한 보통 workspace를 하나 만들고 거기에 여러 프로젝트를 만들어서 개발하기에 해당 블로그가 딱 와닿았다.

먼저, Go를 설치하고 'go env' 명령어로 GOPATH와 GOROOT가 어디에 있는지 확인해보자. 뭐가 있는지도 한번 훑어보고~ (macbook)

  • GOROOT 는 GO의 tools, standard library, compiler 가 있다.
  • GOPATH 가 중요한데 바로 workspace 경로를 가리키는 변수다. 만약 내가 default 가 아닌 곳에서 workspace를 만든다면 변경해야한다.
  • GOBIN 'go install' 해서 생성되는 실행파일의 저장 경로 /bin
GOPATH="/Users/user-name/go"
GOROOT="/usr/local/go"

 

Workspace 만들기

기본 directory 만들기

내가 만들고 싶은 경로에 workspace directory를 만든다. 난 초보라 일단 Go tutorial에 나온 예제 golang.org/doc/tutorial/random-greeting로 해봐야지~

"example" directory를 만들고 그 밑에 세개의 diectory 를 만든다.

  • src : Go 코드를 작성할 .go 파일
  • pkg : compile 된 package object 파일 - 형태는 platform 마다 다르기에 아래 platform directory가 생기고 그 밑에 .a (archived) 파일
  • bin : 실행가능한 파일 (go install 한 main package 파일)
    • go build vs go install : go install 은 내부적 동작은 go build하여 현재 directory에 executable 파일 만들고 bin으로 옮김)

GOPATH, GOBIN, PATH 설정

새로 만든 workspace 에서 compile 한 파일들이 내 workspace 안으로 다 만들어져야 하니까 변수 설정이 필요하다.

export GOPATH=/Users/my-workspace-name/example
export GOBIN=$GOPATH/bin
PATH=$PATH:$GOPATH:$GOBIN
export PATH

packages 구현

src 밑에 두 개의 package를 만들어서 import하도록 한다.

주의: packages are given lower case, single-word names; there should be no need for underscores or mixedCaps.

  • greetings package: main 함수에서 사용할 함수를 제공하는 package

  • main package (hello) : Go의 실행파일의 entry 는 바로 'main' package 의 'main' function 이다. 보통 package 명은 directory 명을 따라가지만 그렇지 않은 경우도 있다. main도 그중 하나~ 
    • greetings 의 'Hello' function을 사용하기 위해 import 'greetings' 를 한다. 

 

Code 실행하기

Compile Code

compile 하는 명령이 'go run' 도 있고 'go install' 도 있는데, 실제 파일이 어느 경로에 생성되는지 보기 위해 'go install'로 하면

  • hello 실행파일은 /bin 에 생성
  • greeting.a archive 파일은 pkg/platform-name/ 에 생성

archive에 .a 로 생성하면 추가 수정하지 않은 import한 package들은 추가로 compile 하지 않을 테니 시간을 아낄수가 있는 장점이 있다. 

실행 순서

packages의 실행 순서는 다음과 같다.

https://medium.com/rungo/everything-you-need-to-know-about-packages-in-go-b8bac62b74cc

Summary

  • Go로 짠 실행프로그램의 시작은 package 'main' 의 'main' function 이다.
  • 'main' package는 compile 하면 /bin 에 실행가능한 파일로 생성된다.
  • 그 이외의 package는 compile 하면 .a archive 파일로 생성된다.
  • Go를 개발할때 workspace 관리를 잘하려면 GOPATH 설정이 중요하다. 그렇다면 workspace 를 새로 만들어 개발할때마다 해당 경로를 GOPATH를 설정해야하는 불편함이 생긴다. 
  • 이러한 packages 관리의 불편함을 해소하기 위해 Go modules 이 제공되는 현재의 버전에서는 어떻게 할 수 있는지 알아보자~