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하도록 한다.
- 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의 실행 순서는 다음과 같다.
Summary
- Go로 짠 실행프로그램의 시작은 package 'main' 의 'main' function 이다.
- 'main' package는 compile 하면 /bin 에 실행가능한 파일로 생성된다.
- 그 이외의 package는 compile 하면 .a archive 파일로 생성된다.
- Go를 개발할때 workspace 관리를 잘하려면 GOPATH 설정이 중요하다. 그렇다면 workspace 를 새로 만들어 개발할때마다 해당 경로를 GOPATH를 설정해야하는 불편함이 생긴다.
- 이러한 packages 관리의 불편함을 해소하기 위해 Go modules 이 제공되는 현재의 버전에서는 어떻게 할 수 있는지 알아보자~
'자습' 카테고리의 다른 글
Go 코드를 AWS Lambda에서 실행해보기 (0) | 2020.12.31 |
---|---|
Go 언어 초보의 Go modules 정리 노트 (0) | 2020.12.20 |
Go 언어 초보가 정리하는 Go 특징 (0) | 2020.12.18 |
How to Use Jupyter Notebook in 2020: A Beginner’s Tutorial (0) | 2020.11.11 |
Automate Your Stock Portfolio Research With Python (0) | 2020.10.22 |