더북(TheBook)

협업할 때 중요한 또 하나는 코드의 스타일을 일관성 있게 맞추는 것이다. 개발자 커뮤니티에서는 괄호나 들여쓰기 같은 코드 서식 지정(formatting)에 관한 논쟁이 종종 일어난다. Go는 코드 스타일을 자동으로 맞춰주는 gofmt 도구를 제공함으로써 이 논쟁을 해결했다. gofmt 도구를 사용하면 코드를 보기 좋게 수직으로 정렬해주고 들여쓰기나 주석도 같은 서식을 지정해서 맞춰준다.

Go는 코드를 쉽게 공유할 수 있는 언어이다. Go에서 제공하는 툴을 사용하면 내가 만든 코드를 다른 사람이 사용할 수 있게 패키징하기 쉽고, 원격 저장소에 있는 소스를 내려받아 사용하는 것도 쉽다. Go에는 외부 패키지를 저장하고 관리해주는 중앙 저장소가 없다. 소스가 저장된 원격 저장소의 URL이 곧 패키지 이름이다(예를 들면 gopkg.in/mgo.v2, github.com/gin-gonic/gin). go get 명령을 사용하면 깃허브(GitHub), 비트버킷(BitBucket) 등의 원격 소스 저장소에서 패키지 소스를 가져와 로컬 환경에 설치할 수 있고 의존성 관리까지 해준다.

Note

자바의 maven, Node.js의 npm, 파이썬의 pip, 루비의 gem 등 다른 언어는 중앙 저장소를 통해 패키지를 관리한다.

• 자바의 maven: http://www.mvnrepository.com

• Node.js의 npm: https://www.npmjs.com

• 파이썬의 pip: https://pypi.python.org/pypi

• 루비의 gem: https://rubygems.org

자바나 C++ 같은 전통적인 객체 지향 언어에서는 보통 인터페이스와 추상 클래스(abstract class)를 기반으로 프레임워크를 구성하고, 구성한 프레임워크를 기반으로 세부 기능을 만들어간다. 인터페이스와 추상 클래스의 구조는 소프트웨어 전체의 동작 방식을 결정하므로 초기 프레임워크를 구성하는 작업은 아주 중요하다. 그리고 이렇게 한 번 구성된 프레임워크는 변경하기가 아주 까다롭다.

Go는 사용자 정의 타입을 먼저 만들어 놓고 인터페이스는 나중에 추가할 수도 있고, 다른 패키지 타입에 메서드를 추가로 정의할 수도 있다. 이는 초기 프레임워크 설계에 대한 부담을 줄여주고, 지속적인 리팩토링을 통해 실용적인 방식으로 개발하게 해준다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.