DevToolPal
한국어

Go 포매터

WebAssembly로 컴파일된 gofmt를 브라우저에서 실행해 Go 소스 코드를 포맷합니다.

로컬에서 실행, 업로드 없음

옵션

들여쓰기

입력

0자 · 0 B

출력

0자 · 0 B

기능 소개

Go 포매터는 Go 소스 코드를 Go 커뮤니티 전체가 사용하는 단 하나의 표준 스타일로 다시 작성합니다. 파일이나 코드 조각을 붙여넣으면 gofmt 방식의 들여쓰기, 공백, import 그룹, 정렬된 구조체 필드와 주석으로 정리된 코드가 돌아옵니다.

Go 툴체인의 진짜 gofmt를 WebAssembly로 컴파일해 실행합니다. 흉내 낸 것이 아니므로 여기서 보이는 결과는 go fmt가 작성하는 것과 정확히 같고, 포맷한 코드를 커밋해도 CI에서 diff가 생기지 않습니다.

사용 방법

  1. Go 코드를 붙여넣거나 .go 파일을 엽니다.
  2. 입력하는 동안 오른쪽에 포맷된 코드가 나타납니다.
  3. 커밋할 코드라면 탭 들여쓰기를 유지합니다. 탭이 너무 넓게 렌더링되는 문서, 슬라이드, 사이트에 넣을 코드라면 공백 2칸이나 공백 4칸을 고릅니다.
  4. 결과를 복사하거나 다운로드합니다.

코드를 파싱할 수 없으면 expected ')', found '{'처럼 첫 번째 오류를 줄과 열과 함께 보여주며, 해당 줄로 바로 이동할 수 있습니다.

예시

예시는 최대한 적은 줄에 욱여넣은 짧은 프로그램입니다. import는 세미콜론으로 구분되어 있고, 구조체는 두 줄에 걸쳐 있으며, 함수의 연산자 주변에는 공백이 없습니다. 포맷하고 나면 다음과 같이 바뀝니다.

  • import가 괄호로 묶인 블록이 되어 한 줄에 패키지 하나씩 들어갑니다.
  • 구조체 필드가 각자 한 줄을 차지하고 타입이 한 열로 정렬됩니다.
  • if u.Age<18{가 if u.Age < 18 {가 되고 본문은 별도의 줄로 내려갑니다.
  • 복합 리터럴의 쉼표와 콜론 뒤에 공백이 들어갑니다.

gofmt가 바꾸는 것과 바꾸지 않는 것

gofmt는 레이아웃만 바꿉니다. 식별자 이름을 바꾸거나, 선언 순서를 바꾸거나, 사용하지 않는 import를 지우지 않습니다. 그런 작업은 goimports나 go vet 같은 도구의 몫입니다. 의미 있는 줄바꿈도 그대로 두므로 여러 줄로 나눈 긴 인자 목록은 나뉜 상태로 유지됩니다.

주석은 유지되며 주변 코드에 맞춰 다시 들여쓰기됩니다. 연속된 줄의 끝에 붙은 주석은 구조체 필드처럼 한 열로 정렬됩니다.

팁

  • 포맷은 빠진 중괄호를 찾는 빠른 방법입니다. 오류 위치는 보통 실수한 곳 바로 다음 줄을 가리킵니다.
  • 이슈나 리뷰에 코드를 공유하기 전에 포매터를 실행하세요. 리뷰어가 코드의 모양 대신 동작에 집중할 수 있습니다.
  • 에디터에서 gopls로 “저장 시 포맷”을 켜 두면 파일이 항상 이 출력과 같은 상태로 유지됩니다.

자주 묻는 질문

› 진짜 gofmt인가요?

네. 포매터는 Go 툴체인의 gofmt 코드를 WebAssembly로 컴파일한 것이므로, 출력은 내 컴퓨터에서 `gofmt`나 `go fmt`가 출력하는 결과와 바이트 단위까지 같습니다.

› package 선언이 꼭 있어야 하나요?

아니요. 파일 전체를 넣는 것이 가장 좋지만, gofmt는 선언 목록이나 몇 개의 문장도 받아들이므로 블로그 글이나 채팅에서 복사한 코드 조각을 정리할 때 편리합니다.

› 들여쓰기에 탭을 쓰는 이유는 무엇인가요?

gofmt는 항상 탭으로 들여쓰고 공백으로 정렬합니다. 이것이 Go의 관례이며, 에디터에서는 탭을 원하는 너비로 표시할 수 있습니다. 문서나 슬라이드용으로 공백이 필요하다면 공백 2칸이나 4칸을 고르세요. 줄 앞쪽의 탭만 바뀝니다.

› 코드가 업로드되나요?

아니요. WebAssembly 모듈은 한 번만 다운로드되고, 포맷은 브라우저에서 로컬로 실행됩니다.