본문 바로가기

Backend/Golang

Go 언어 - [2장] (Go 환경 설정)

※ 디스커버리 Go 언어 라는 책 내용을 전반적으로 다루지만 책 리뷰보다는 좀 더 간단하게 정리해보겠습니다.

 

2. 환경 설정하기

 

2.1 설치하기

 

맥에서 homebrew 를 통해 golang 을 설치해보도록 하겠습니다.

먼저 터미널에서 brew install golang 을 입력합니다.

 

> brew install golang

 

설치는 금방 완료됩니다. 이후 터미널에서 go version / go / go env 등의 명령어를 입력했을때 아래처럼 잘 나오면 설치는 성공입니다.

 

> go version
go version go1.14.6 darwin/amd64

 

이제 GOROOT / GOPATH / PATH 설정을 확인하고, 필요하면 추가해보겠습니다.

  • GOROOT : Go 를 설치했을 때 Go 관련된 실행파일, SDK 등이 위치하는 곳
  • GOPATH : bin, pkg, src 폴더가 위치하는데 go get 명령어를 통해 받은 패키지나 라이브러리, 소스파일이 위치하는 곳

커맨드 창에 go env 를 입력해봅니다.

 

> go env
GOPATH="$HOME/go"
GOROOT="/usr/local/Cellar/go/1.14.6/libexec"

 

GOPATH 의 경우 앞으로 작업할 파일들이 위치하게 되는데, default 로 잡힌 저 위치를 그대로 사용하도록 하겠습니다.

다만 GOROOT 의 경우 go 의 버전을 변경하면 바꿔줘야 할 필요가 있을듯해서 수정과 함께 PATH 환경변수도 수정을 해보겠습니다.

 

> vi ~/.zshrc

export GOPATH=$HOME/go
export GOROOT="$(brew --prefix golang)/libexec"
export PATH="$PATH:${GOPATH}/bin:${GOROOT}/bin"

> source ~/.zshrc

 

zshrc 파일을 열어 GOROOT, PATH 라인을 추가해서 저장한 후 source ~/.zshrc 를 실행해 줍니다.

 

2.2 작업 공간 설정하기

 

git 은 이미 설치가 되어있다는 전제입니다.

default 로 설정된 GOPATH 를 그대로 사용하기로 했기때문에, 해당 위치에 작업 디렉토리를 만들도록 하겠습니다.

 

> mkdir -p ~/go
> cd ~/go

 

위에서 얘기한것처럼 이 작업공간에는 bin, pkg, src 폴더가 위치하게 될 것입니다. go get 명령어를 통해 주로 사용할 명령 도구들을 설치해보겠습니다.

 

> go get golang.org/x/tools/cmd/...

> go get golang.org/x/tools/cmd/goimports (goimports 도구 하나만 설치할 시)

 

위 명령어를 터미널에서 실행시 ~/go 위치에 bin, pkg, src 폴더가 생성된 것을 확인할 수 있습니다. 설치된 명령 도구들은 bin 폴더 아래에 들어가있는데, 아까 $HOME/go 로 잡힌 GOPATH 를 PATH 폴더에 추가했었기에 PATH 를 따로 수정할 필요없이 아래의 명령어로 명령 도구들을 확인 가능합니다.

 

> goimports --help

 

그럼 이제 예제 코드를 작성해보겠습니다. 현재 위치에서 바로 go 파일을 작성하는 것이 아닌, 아래와 같은 폴더를 만들어서 사용합니다.

 

> mkdir -p $GOPATH/src/github.com/{usernmae}/sample
> cd $GOPATH/src/github.com/{username}/sample

 

위와같은 형태로 구조를 잡으면 이후 오픈소스로 공개했을 때 다른 프로그래머들이 go get 명령어로 소스를 쉽게 받아갈 수 있다고 합니다.

 

> vi sample.go

package main

import "fmt"

func Move(n, from, to, via int) {
  if n <= 0 {
    return
  }
  
  Move(n-1, from, via, to)
  fmt.Println(fmt, "->", to)
  Move(n-1, via, to, from)
}

func Sample(n int) {
  fmt.Println("Number of disks: ", n)
  Move(n, 1, 2, 3)
}

func main() {
  Sample(3)
}

 

이후 아까 설치했던 명령 도구들을 간단히 활용해보고, 실행해보겠습니다.

 

> gofmt -w sample.go // 작성한 파일에서 형식이 잘못된 부분을 고쳐서 다시 작성해 줌
> goimports -w sample.go // 자동으로 import 경로를 추론해 소스 코드 상단에 추가해 줌
> go run sample.go // go파일 실행

 

위처럼 작성한 sample 폴더 자체가 하나의 패키지가 될 수 있습니다. 이후 다른 파일에서 해당 패키지를 import 해서 사용하고자 한다면 아래와 같습니다.

 

import "github.com/{username}/sample"

 

이후 이 패키지 안에 대문자로 시작하는 함수는 sample.Move 와 같이 접근이 가능합니다. 만약 sample.go 의 코드에 Move 를 move 로 고친다면 다른 패키지에서 이 함수를 사용할 수 없을 것입니다.

 

2.3 편집기 설정하기

 

에디터로 VSCode 를 사용하는데, Go 플러그인만 설치하면 무리없이 사용할 수 있습니다.

 

2.4 도구 사용하기

 

몇 가지 유용한 도구들의 사용법을 소개해보도록 하겠습니다.

 

  • godoc : go 프로그램의 문서를 볼 수 있는 도구
> go doc fmt (fmt 에 관한 문서를 터미널에서 볼 수 있음)
> godoc -http=:6060 (명령어 실행 후 브라우저에서 localhost:6060 으로 들어가면 여러 라이브러리들의 문서를 볼 수 있다)

 

  • Oracle : 소스코드에 여러가지를 물어볼 수 있는 도구, 하지만 명령어를 통해 직접 이용하긴 어려우니 에디터와 연동하여 쓰는것을 권장합니다.
  • Vet : 소스코드를 검사하기 위한 도구
> go tool vet github.com/{username}/sample
> go tool vet *.go

 

위처럼 패키지 경로나 파일 단위로 검사할 수 있습니다.

 

  • Fix : 변경된 옛 API 호출 등을 자동으로 고쳐주는 도구, Go 버전 업그레이드 시 유용
> go tool fix github.com/{username}/sample

 

  • Test : 테스트를 수행하는 도구, 테스트 작성은 다음 시간에 다루도록 하겠습니다.
> go test github.com/{username}/sample

 

2.5 Summary

 

  • Go 설치 및 디렉토리 구성, 패키지별로 나누는 법 숙지
  • go get 을 사용하면 오픈 소스로 공개되어 있는 패키지 쉽게 이용 가능
  • godoc 을 사용하면 주석을 문서화할 수 있고 다른 패키지 문서도 볼 수 있음
  • 에디터에는 gofmt 를 설정하여 자동으로 형식을 맞추는 것 권장
  • goimport 설정해 import 도 자동으로 할 수 있게 설정하여 생산성 향상 권장

 

 

출처 : https://book.naver.com/bookdb/book_detail.nhn?bid=10337667