Go 라는 언어는 참 재미있습니다. 프로그램 언어 중 어린 나이라서 최신 기술과 그 동안의 개발자들의 많은 고민들이 스펙이 들어가있습니다. Go를 공부하면서 겪는 특이한 점들을 몇 개 정리 해보았습니다.

구글에서 Go를 검색할려면?

첫 번째로 부딪힌 가장 재미있는 점은 구글에서 궁금한 점을 찾을 때 키워드가 약간 고민스럽습니다. 단순히 go 라고 검색하면 생뚱맞은 결과들이 나타날 때가 많습니다. 그래서 대부분의 개발자와 질문을 올리는 사람들이 golang이라고 적어서 올립니다.

  • go 이면서 go라고 부르지(아니 검색하지) 못하는 재미있는 언어

대/소문자를 이용한 제한자

대문자 함수는 public, 소문자이면 private 정말 이건 안 익숙해지는 규칙입니다. 제한자를 대소문자의 관례로 선언해도 명시적으로 표현은 가능합니다. 하지만 코드 내에서 대소문자 메소드를 혼합하여 사용하니 여전히 익숙하지 않습니다.

  • 메소드 제한자는 대소문자로 구분

Go 패키지와 파일 구조

지금까지 접해온 언어는 C#, Java, Python, Js 정도입니다. 그 중에서 Go는 가장 특이한 패키지/파일 관리 구조를 가지고 있습니다. 그래서 빌드 설정이 복잡하다고 느끼는 것 같습니다.

  • local package import 구성이 어려움

Import는 왜 local packages가 안될까?

상대 경로로 접근하는 import 는 지양하고 Github에 올라있는 공개 저장소에서 코드를 사용하는 것이 Go의 문화[참고1]입니다. 하지만 반드시 상대 경로로 설정을 해야만 하는 경우에는 $GOPATH에 심볼릭 링크를 걸어두는 것이 가장 간단한 방법입니다.

ln -s ~/path/to/myproject/lib  $GOPATH/src/{libraryName}

Log, glog, loggo 왜 기본 로깅 라이브러리 외에 이렇게 많지?

Go의 Log 라이브러리 중 loggo[참고2]에 적힌 라이브러리 설명은 다음과 같습니다.

A logging library for Go. Doesn’t use the built in go log standard library, but instead offers a replacement.

뭐 이렇게 대놓고 빌트인 라이브러리를 사용하지 말라고 하는지 놀랍습니다. 사실 다른 개발 언어를 사용하게 되면 log4류(log4j, log4net, logback, slf4j 등)의 라이브러리를 많이 사용하게 됩니다. 그리고 Java의 logging 라이브러리 JDK 1.4부터 포함되어 배포되고 있고 log4 류와 유사한 인터페이스를 제공합니다.

하지만 Go에 포함된 로깅 라이브러리는 상당히 독특한 인터페이스를 보입니다.

무슨 IDE를 써야하는가?

IntelliJ IDEA, Atom, Sublime, GoIDE, Visual Studio Code 너무나 많습니다. 그런데 재미있는 점은 모두 비슷한 수준(괜찮은)으로 Go 개발환경을 제공해줍다. 어떻게 보면 복잡하고, 어떻게 보면 내가 원하는 툴을 사용할 수 있는 자유도가 높은 환경이라 좋습니다.

다양한 IDEA 중 나의 선택은 Visual Studio Code & IntelliJ IDEA

가볍게 켜서 개발하기 위해 최종적인 선택은 Visual Studio Code에 Golang 관련 플러그인을 설치하여 사용하는 것입니다. 개인적으로 Go로 개발할 때는 가벼운 서비스인 경우가 많기 때문에 가벼운 Visual Studio Code가 적합하였습니다.

물론 조금 복잡한 구조를 가져가야 할 때는 IntelliJ IDEA 를 사용하여 디버깅 및 개발하는 것 같습니다. 주의할 것은 IntelliJ IDEA에 go 플러그인을 설치하여 사용하면 라이브러리로 구성된 함수를 호출할 때 Syntax 오류가 표시될 때가 있습니다. (다시 캐시를 갱신하거나 다시 켜면 사라집니다)


  1. 참고[1] Go Production Environment | https://peter.bourgon.org/go-best-practices-2016/ [return]
  2. 참고[2] loggo (for golang logging) | https://github.com/juju/loggo [return]