본문 바로가기
리뷰/도서

[리뷰] Learning Go - 러닝 Go

by Remover 2022. 3. 26.
반응형

 

 

 

'뚝딱거리지 않고 원래 Go 언어 개발자였던 것처럼 자연스럽게 코드 작성하기' 책의 뒷표지에 적혀있는 문구이다. 처음에는 java나 python처럼 엄청 간단하게 익힐 수 있을 것 같았는데... 책을 보다보니 또 그렇지는 않았다. 뚝딱거리지 않으려고 했는데 뚝딱거린 시작이었다.

 

가장 헷갈렸던 부분은 신기하게도 Go의 경우 사용하지 않는 변수가 있으면 에러가 발생한다. 자바나 파이썬에서는 사용하지 않더라도 IDE에서 Warning을 줄 뿐이지만 Go는 애초에 사용하지 않는 변수는 오류가 발생한다는 사실을 알았다. 어찌보면 실수를 안하니 좋을지도...

package main

import "fmt"

func main() {
	var sa = `test` // error 발생, 사용하지 않는 변수
	// fmt.Println(sa)
}
 

다른 언어들과의 다른 특징중 하나는 다중 반환값을 허용한다는 것이다. 이 부분은 너무 신기했다. 자바에서 다중으로 받으려면 Map, Pair, Turple 등을 이용해서 상황에 맞게 받을 수 있게 만들었던것 같은데 언어 자체가 다중 반환을 지원해준다니 너무나 감사할 따름이다.

func divAndRemainder(numerator int, denominator int) (int, int, error) {
    if denominator == 0 {
        return 0, 0, error.New("cannot divide by zero")
    }
    return numerator / denominator, numerator % denominator, nil
}
 

러닝 Go 책을 차근차근 따라가다보니 뚝딱거림이 줄어드는게 느껴졌다. 문법적인 부분도 설명해주지만 Go라는 언어에 대해서 왜 그렇게 만들었는지 등에 대한 내용을 자세히 설명해주고 있어서 도움이 많이 되었다.

챕터6에 도달하니 포인터가 나왔다. C/C++ 공부할 때 이후로 포인터를 보는 것은 오랜만이다. 자바에 익숙해져있다보니 포인터를 잊고 살았는데 주마등처럼 스쳐가는 포인터에 대한 두려움..

 

Go에서도 포인터를 사용한다. 포인터 구문 중 일부는 C와 C++에서 차용했다. 다만 Go는 가바지 컬렉터를 가지고 있기 때문에..(좋은 건 다 가지고 있네!) 메모리 관리에 대한 고통이 없다고 한다. 책을 읽으면 읽을 수록 Go라는 언어에 빠져드는 기분이 들었다.

 

C와 C++에서 포인터에 대한 설명이 책 하나로 나올정도로 정리된 내용을 본적이 있다. 그만큼 이해하기가 어려운 부분이었는데 책에서는 그림을 통해 조금 더 쉽게 설명하려는 노력을 해주고 있다. 포인터를 원래 이해하고 있어서 인지 설명을 잘해서인지는 모르겠지만 그림만 보고 이해를 쉽게 할 수 있었다.

 

챕터6을 지나면 챕터 10의 동시성과 11의 표준 라이브러리 등에 대한 내용들을 익힐 수 있다. 책을 보면서 들었던 생각은 이 책은 사소한 부분도 놓치지 않고 신경쓰면서 챙겨주는 책이라는 것이었다. 언어를 처음 배우는 사람에게 누구보다 상세하게 알려주는 선생님 같은 느낌. 누군가 Go를 배워보고 싶다고 한다면 나는 이 책을 추천하고 싶다.

 


총평

Go 를 처음 배우는 사람에게 정말로 추천하고 싶은 책!

전반적으로 상세한 설명을 가지고 있는 책!

책을 따라가다보면 어느순간 뚝딱거리지 않게 되는 책!

 

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

 

댓글