본문 바로가기
개발/Golang

초보 개발자의 Golang 학습기 - (1) Goland로 Go 개발 시작하기

by 상5c 2021. 6. 24.

Go 언어를 처음 접한 저에게 발생한 문제와 도움이 되었던 정보들을 정리한 글입니다. 초보의 입장에서 작성한 글로 잘못된 내용이 있을 수 있습니다.

  • Goland는 Jetbrains사의 Golang IDE 이며, 유명한 무료 IDE로는 Visual Studio Code가 있습니다.

이 글에선 Goland: 2021.1.3 , Go: 1.16.4/windows 버전을 사용하고 있습니다.

Go 언어와 관련된 검색에선 키워드를 Go 대신 Golang으로 검색해야 합니다. 정식 명칭은 'Go' 이지만 불필요한 검색 결과가 많이 포함되는 문제가 있기 때문에 Golang이라고 검색합니다. 위키백과에 따르면 Go의 홈페이지 주소가 golang.org 이기 때문에 종종 golang으로 호출된다고 합니다. Go 언어 사용자는 Gopher라고 부릅니다.

소스는 golang 공식 홈페이지의 getting started를 사용했습니다.

1. 프로젝트 생성하기

Goland의 프로젝트 생성 버튼을 누르면 보이는 창입니다. GOROOT, GOPATH 등 모르는 단어들이 반겨줍니다.

이곳에서 Go modules를 선택하여 프로젝트를 생성합니다. Go modules를 선택하는 경우 go.mod 파일이 프로젝트에 생성됩니다.

Dep은 Go modules 이전의 의존성 관리 도구입니다. modules의 보편화로 인해 사용하지 않게 되었다고 알고있습니다.

App Engine은 웹 애플리케이션을 개발하고 호스팅 할 수 있는 서비스이자 플랫폼이라고 합니다. (참고) 직접 사용해보지 않아 링크로 대체합니다.

GOROOT와 GOPATH

  • 과거의 Golang은 워크스페이스를 지정하고 해당 워크스페이스 하위에 코드가 존재해야 했습니다. 이 워크스페이스가 GOPATH이며 기본 경로는 C:\Users\<username>\go\ 입니다. 코드는 GOPATH\src 아래에 위치해야 했으며, 이 제약을 자유롭게 바꿔준게 Go modules 입니다.
  • GOROOT는 Go의 컴파일러와 기본 모듈들이 담기는 공간입니다. Golang 설치 경로이며 기본 경로는 C:\Program Files\go 입니다.
  • 두 단어는 이후에도 종종 IDE 설정에서 등장하지만, golang 튜토리얼을 찾아봐도 두 단어에 대한 언급이 보이지 않아 당황스러웠습니다.
  • https://www.jetbrains.com/help/go/configuring-goroot-and-gopath.html

2. Hello world 출력하기

이제 튜토리얼을 따라 코드를 작성합니다.

// hello.go
package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}
  • 실행은 Ctrl + Shift + F10 또는 메인함수 좌측의 실행 버튼을 눌러 할 수 있습니다.

프로젝트 템플릿 중에 Go를 선택하여 프로젝트를 생성한 경우 Enable Go modules integration 옵션을 활성화하고, go mod init 명령어를 실행해서 go.mod 파일을 생성해야 합니다.

$ go mod init example.com/hello

3. 외부 패키지 호출하기

// hello.go
package main

import (
    "fmt"
    "rsc.io/quote"
)

func main() {
    fmt.Println(quote.Go())
}

이번에는 외부 패키지인 quote가 코드에서 사용되었습니다. 복사 붙여넣기를 했더니 빨간 하이라이팅이 반겨줍니다.

Alt + Enter로 IDE가 해결하도록 하거나, 의존성을 설치하는 명령어인 go mod tidy를 직접 실행합니다.

정리하기

command를 직접 입력하는 경우

  • 프로젝트 폴더 생성
  • 모듈 초기화 명령 실행 go mod init <module name>
  • 코드 작성
  • 실행에 필요한 dependency 다운로드 go mod tidy

Goland를 사용하는 경우

  • Go modules 템플릿으로 프로젝트 생성
  • 코드 작성
  • Sync dependencies 기능 실행