이 글은 제가 Go를 학습한 내용을 정리한 글 입니다.
Go를 학습한 레퍼런스는 이곳에서 확인하실 수 있습니다.

What is go?

Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.

Go는 구글에서 개발한 프로그래밍 언어로써 실용성을 목적으로 하는 언어입니다.
가장 강력한 특징으로는 컴파일 언어이지만, 컴파일 속도가 빨라 인터프리터 언어처럼 사용할 수 있습니다.

Installation


brew install go

$ go version
go version go1.10 darwin/amd64

Setting Environment for Go


// .bash_profile
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin

$ mkdir -p $GOPATH/src $GOPATH/pkg $GOPATH/bin

위에 .bash_profile에서 설정한 GOPATH는 Go 언어로 된 프로젝트를 사용하거나 개발할 때 사용되는 디렉터리를 가리키는 환경변수입니다.

이 GOPATH로 설정한 위치에 src, pkg, bin 3가지 파일을 생성하였는데요. 이 3 가지 파일들은 아래와 같은 역할들을 가지고 있습니다.

  • src: 모든 소스코드를 보관하는 폴더
  • pkg: package 관련 라이브러리를 보관하는 폴더
  • bin: 컴파일된 파일을 보관하는 폴더

환경 변수를 설정한 뒤에는 커맨드창을 재시작 해줘야 변경된 환경변수가 적용됩니다.

Hello world


이제 Go에 대한 설치와 설정을 완료하였으니 프로그래밍의 시작인 Hello, world를 찍어보겠습니다.

우선, 아래의 위치에 다음과 같은 디렉터리를 생성합니다.

$GOPATH/src/github.com/{your-user-id}/hello

그 후, 이 디렉터리 위치에 hello.go 파일을 생성하고 다음과 같이 입력합니다.

package main

import "fmt"

func main() {
    fmt.Println("Hello, world")
}

코드를 작성 한 후, 커맨드 창에 go run hello.go 를 입력하면 커맨드 창에 Hello, world 가 찍히는 것을 볼 수 있습니다.

이 코드에 대한 설명을 하자면,

  • 처음의 package main 은 func main을 정의 하기 위한 패키지이며, 이 패키지는 그룹 되어진 Go 코드 입니다. (Javsscript의 라이브러리와 같은)
  • import "fmt" 는 Go에서 파일 출력을 할때 사용되는 라이브러리로 func main 내부를 보시면 fmt.Println 함수를 이용해서 문자열을 출력하고 있습니다.
  • func main() 은 Go에서 함수를 정의 할 때 사용되는 키워드로 중괄호를 사용해서 범위를 지정하고 있습니다.

Writing Test Code


위에 작성한 Hello, world 코드를 사용해서 테스트 코드를 작성해 보겠습니다.
우선 테스트 코드를 작성하기 앞서 테스트 하기 쉽게 도메인 코드를 분리 해 보겠습니다.

도메인 코드란 외부 세계에 영향을 끼치지 않는 코드를 말하며, 위의 예제를 예로 들자면 fmt.Println 함수가 파일출력으로 외부에 영향을 끼치는(Side-effects를 일으키는) 코드이며, 이 코드 내부의 문자열을 따로 제공하는 코드를 도메인 코드로써 분리 할 수 있습니다.

package main

import "fmt"

func Hello() string {
    return "Hello, world"
}

func main() {
    fmt.Println(Hello())
}

이 코드에 추가적인 설명을 하자면 func Hello() 함수 선언의 옆에 string 은 이 함수의 출력 타입을 의미합니다.

이렇게 도메인 함수를 분리 한 후, 다음과 같은 파일을 생성합니다.

// hello_test.go
package main

import "testing"

func TestHello(t *testing.T) {
    got := Hello()
    want := "Hello, world"

    if got != want {
        t.Errorf("got %q want %q", got, want)
    }
}

작성한 테스트 코드를 실행시키려면 커맨드 창에 go test를 입력하면 테스트 결과를 말해줍니다.

이 파일의 코드를 설명하자면, test 를 위해 import "testing" 코드를 작성하였으며, 테스트 함수를 작성하며 인자로 t *testing.T를 넘겨주었습니다.
또한 기본적인 Go 문법을 정리하자면,

  • 변수 선언 : := 키워드를 이용해서 왼쪽 대입자에 대해 오른쪽 대입자의 값을 주입합니다.
  • if : if 키워드를 사용하여 조건문을 작성 할 수 있습니다.
  • 문자열 변수 전달 : %q를 문자열에 넣고 뒤에 , 를 사용하여 넣은 갯수 대로 변수를 대입해 값을 전달합니다.

배너 메이커