이 글은 Effective Go를 일부 번역한 글입니다.


서식

서식 문제는 가장 많은 논란을 불러오지만 가장 사소하다. 사람들은 다른 서식에 적응할 수 있지만 그럴 필요가 없는 게 더 낫고, 모두가 같은 서식을 따른다면 이 주제에 더 적은 시간을 할애할 것이다. 문제는 장문의 표준 서식 안내서 없이 이상향에 도달할 방법이다.

우린 Go에서 색다르게 접근하기로 했다. 서식 문제 대부분을 기계에 맡기는 것이다. gofmt 프로그램이 (go fmt으로도 사용할 수 있다. 이는 소스 파일 단위가 아니라 패키지 단위로 동작한다.) Go 프로그램을 읽고, 표준 들여쓰기와 수직 정렬 방식을 적용해 소스를 출력한다. 주석은 유지하지만 필요하다면 형태가 바뀔 수도 있다. 새로운 배치 환경을 다루는 방법을 알고 싶다면, gofmt을 실행하라. 결과가 바르지 않은 것 같다면, 프로그램을 다시 정렬하라. (아니면 gofmt 버그를 제출하라.) 이를 피해 가지 말라.

예를 들어, 주석과 구조체의 필드를 정렬하는 데 시간을 들일 필요가 없다. gofmt이 대신해 줄 것이다. 주어진 선언을

type T struct {
	name string // name of the object
	value int // its value
}
gofmt이 정렬해 줄 것이다.
type T struct {
	name    string // name of the object
	value   int    // its value
}

표준 패키지의 모든 Go 코드는 gofmt으로 서식을 맞췄다.

세부 서식이 남았다. 간략하게 보자.

들여쓰기
우린 들여쓰기에 탭을 사용하고, gofmt도 기본적으로 탭을 사용한다. 꼭 필요할 때만 스페이스를 사용하라.
줄 길이
Go는 줄 길이에 제한을 두지 않는다. 펀치 카드의 너비를 넘을까 걱정하지 말라. 줄이 너무 길게 느껴진다면 감싸고 탭을 하나 추가해 들여쓰기 하라.
괄호
Go는 C나 Java보다 괄호를 더 적게 사용한다. 제어문(if, for, switch)은 그 문법에 괄호가 없다. 또한 연산자 우선 순위는 더 짧고 명료하다. 따라서 다른 언어들과는 다르게

x<<8 + y<<16
은 칸 비움이 암시하는 바와 같은 뜻을 나타낸다.