Hello, Go! - GoLang과의 첫 만남

2016-11-30 21:20:00

이게 얼마만이지? 한 8년 만에 처음으로 새로운 언어를 접한 것 같다. 갑자기, 내가 더 이상 개발자가 아니라는 것이 실감이 나네.
아무튼 오늘, 전혀 예상하지 못했던 이유로 GoLang을 만나게 되었다.

새로운 언어를 배우는 것 보다, 그것을 위한 새로운 환경을 꾸미는 것이 사실 조금 더 귀찮아졌다. 역시 나이가 드는 것은… 무서운 일이다. 내가 이런 게 귀찮아지리라고는 생각도 하지 못했는데…

아무튼, 홈페이지의 설치 설명서를 보고 설치를 시작했는데, 매우 싱겁게 끝나버렸다. 이 글은 그 간단한 설치에 대한 역시 간단한 기록이다.

Install

먼저, 다음 페이지에서 배포본을 내려받아야 한다. 물론, 이미 등장한 것이 꽤 된 언어이고 Ubuntu에도 패키지가 있지만, 최신 버전을 쓰고 싶은 욕심에 공식 홈페이지에서 내려받은 따끈한 버전을 사용하기로 했다.

https://golang.org/dl/

뭐, 매우 간단한 모양으로 배포가 되는데, 아래와 같이 적당한 경로에 풀어주는 것으로 설치가 끝난다.

$ sudo mkdir -p /opt/google
$ cd /opt/google/
$ sudo tar xf /home/_downloads/go1.7.3.linux-amd64.tar.gz
$ sudo mv go go-1.7.3
$ sudo ln -s go-1.7.3 go
$ 

예전에 하던 방식으로, 펴놓은 파일은 버전을 반영한 원본 디렉터리에 담아주고 심볼릭 링크를 이용하도록 구성했다. (내가 좋아하는 방식일 뿐, 원래의 설명서 내용과는 다르다.)

/usr 등의 표준 경로에 설치된 것이 아니니, 당연히 환경변수의 설정은 필수가 된다. 아래의 설정 중, 맨 아래의 PATH 설정은 단순히 실행파일의 탐색 경로를 지정하는 것이고, 가운데 GOROOT는 배포 표준 경로인 /usr/local/go가 아닌 다른 곳에 설치했을 때 설치 트리를 찾을 수 있게 해주기 위한 설정이다. 맨 위의 GOPATH는 환경변수명이 좀 색다르긴 하지만, 개발자 고유의 작업본 경로를 지정하기 위한 것이다. (아! 뻔한 얘기인데 혹시나, 아래 설정은 bash 등의 문법으로 설명한 것이며, 사용자의 Shell에 맞는 설정을 하면 된다. bash의 경우, 아래의 설정을 .bashrc 또는 .bash_profile에 추가해주면 된다.)


### GOLANG settings
export GOPATH="$HOME/gowork"
export GOROOT="/opt/google/go"
export PATH="$PATH:$GOROOT/bin"

이제, 새로 창을 열거나 설정파일을 source하여 새로운 환경변수를 적용하고, 설치가 잘 되었는지 시험을 할 차례이다.

어? 설치 끝난 거냐고? ㅇㅇ!

Test Environment

아래 화면의 맨 첫줄과 같이, 앞서 설정한 작업경로를 만들어준 후, 그 안으로 쏙 들어가서 시험을 준비한다. 아직 공부를 하지 않아 모르겠는데, 작업경로 바로 밑에 src라는 경로가 뭔가 특별한 일을 해주는 것 같다. 원래 C 언어에 익숙한 내게는 좀 생소한데, 뭔가… Java 패키지 트리를 보는 듯한 느낌이 들기도 하고… github.com 아래의 사용자이름 아래에 다시 프로젝트명이 오는 경로 구조를 보면, 아예 언어 차원에서 Github를 지원하는 듯 한… 바꿔 말하면 Github에 대한 존경과 세태의 반영이 된 듯한 느낌을 받는다.

여담이지만, Google Code가 문을 닫으면서, 그 안의 프로젝트들에 대하여 Github 이전 서비스를 하던 모습이 떠오른다. Google이, 같은 G씨인 Github를 매우 좋아하는 듯.

$ mkdir ~/gowork
$ cd ~/gowork
$ mkdir -p src/github.com/sio4/hello
$ vi src/github.com/sio4/hello/hello.go
$ 

아무튼, 위와 같이 경로를 만들어준 후에 hello.go 파일을 편집하여 아래와 같은, 전설의 Hello World 코드를 작성해준다.

오랜만이다 Hello World. 반갑다. (예제 코드지만 간단하게나마 컴퓨터 언어를 보니 뭔가 떨리네… ㅋㅋ)

package main

import "fmt"

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

뭔가 좀 섞인 분위기의 코드이지 않나? 아무튼, 아래와 같이, 작업경로 안에서 go install 명령을 이용하여 컴파일을 해준다. (좀 특이하지 않냐?)

$ pwd
/home/sio4/gowork
$ go install github.com/sio4/hello
$ find -type f
./bin/hello
./src/github.com/sio4/hello/hello.go
$ file ./bin/hello
./bin/hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped
$ LANG= ls -lh bin/hello 
-rwxrwxr-x 1 sio4 sio4 1.6M Nov 30 18:15 bin/hello
$ strip bin/hello 
$ LANG= ls -lh bin/hello 
-rwxrwxr-x 1 sio4 sio4 1005K Nov 30 19:59 bin/hello
$ 

오호라, 간만에 만났구나 Statically linked excutable! 이렇게 되면, GoLang으로 작성된 프로그램을 돌리기 위한 Runtime을 별도로 구성하지 않아도 어디서든 이 바이너리를 돌릴 수 있겠다. 멋지네. (물론, 좀 크긴 하다. Hello World일 뿐인데.)

일단 실행을 해본다.

$ bin/hello 
Hello, Go!
$ 

응, 나도 안녕~! 반갑다.

그나저나… Google은 참 대단하다. ㅎ

--
"And in the end, the love you take is equal to the love you make." -- by the Beatles

Related Posts

Hi! I'm Yonghwan SO,
An open source oriented software engineer from Seoul, Korea.

powered by jekyll and github
RSS Feed