본문 바로가기
다양한 TIP

golang gofmt 사용방법

by 유기농프로그래밍 2024. 4. 29.
반응형

gofmt 는 go언어로 만든 코드를 자동으로 포멧팅해주는 도구입니다. go 코드를 일관된 스타일로 정리해주기 때문에 협업시에서도 일관된 스타일로 볼 수 있고 가독성 또한 좋게 바꿔줍니다.

 

gofmt의 사용방법

 

기본 사용법

gofmt는 명령줄에서 실행할 수 있으며, 기본적으로는 표준 입력에서 읽은 Go 소스 코드를 표준 출력으로 포맷팅된 코드를 출력합니다.

 

가장 간단한 사용 예는 파일을 직접 포맷팅하여 결과를 화면에 출력하는 것입니다:

gofmt myfile.go

 

파일 직접 수정

코드를 파일에 직접 적용하고 싶다면 -w 옵션을 사용하면 됩니다. 이 옵션을 추가하면 gofmt는 원본 파일을 포맷팅된 내용으로 대체합니다.

 

gofmt -w myfile.go

 

디렉토리 전체 수정

디렉토리에 있는 .go 파일 전체를 수정하고 싶다면 아래 예제처럼 폴더를 입력하면 됩니다.

이 명령은 지정한 폴더 및 그 하위 폴더에 있는 모든 .go 파일을 재귀적으로 찾아 포맷팅합니다.

gofmt -w ./path/to/your/folder

 

간격 조정

Go 코드에서는 일반적으로 탭을 사용하지만, 공백의 수를 조정하고 싶다면 -tabs=false와 -tabwidth=4 (또는 원하는 숫자) 옵션을 사용할 수 있습니다. 이는 탭 대신 공백을 사용하도록 설정하며, 공백의 크기를 지정합니다.

gofmt -tabs=false -tabwidth=4 myfile.go

 

diff 출력

변경 사항을 바로 파일에 적용하는 것이 아니라 변경될 내용을 미리 보고 싶다면 -d 옵션을 사용합니다. 이는 포맷팅 후 변경된 내용을 diff 형식으로 출력합니다.

gofmt -d myfile.go

 

예시

원본코드

package main
import "fmt"
func main() {fmt.Println("Hello, world!")}

 

gofmt 적용 후

package main

import "fmt"

func main() {
    fmt.Println("Hello, world!")
}

 

 

적용 안될시 확인할 것

gofmt 사용 중에 "expected declaration, found" 같은 에러 메시지가 나타나는 경우, 이는 대체로 Go 코드 내에 구문 오류(syntax error)가 있음을 의미합니다. gofmt는 코드의 스타일과 포맷을 정리하는 도구지만, 코드 자체에 구문상의 오류가 있는 경우에는 정상적으로 실행되지 않습니다. 이런 경우 gofmt는 포맷팅을 수행하지 않고 에러를 반환합니다.

 

해결 방법

코드 검사: 발생한 에러 메시지를 바탕으로 해당 코드 부분을 검토하고, Go의 구문 규칙에 맞지 않는 부분이 없는지 확인하세요. 에러 메시지에서 지적한 부분 근처의 코드를 주의 깊게 살펴보아야 합니다.


구문 오류 수정: 가장 흔한 구문 오류에는 누락된 괄호, 세미콜론, 잘못된 변수 선언 등이 있습니다. 에러 메시지가 가리키는 'expected declaration'은 보통 함수, 변수, 상수 선언 등이 예상되는 위치에 적절한 선언이 없을 때 발생합니다.


간단한 예제로 테스트: 문제의 원인을 좁히기 위해 간단한 코드 조각에 gofmt를 적용해 보세요. 이를 통해 문제가 특정 코드 블록에 의해 발생하는지 여부를 확인할 수 있습니다.


IDE/텍스트 에디터 사용: 많은 현대 IDE나 텍스트 에디터는 Go 코드의 구문 오류를 실시간으로 감지하고 표시합니다. Visual Studio Code, GoLand 등의 도구를 사용하면 코드 작성 중 발생하는 오류를 쉽게 찾아낼 수 있습니다.


Go 컴파일러로 검증: 코드 파일을 직접 컴파일해 보세요. "go build" 또는 "go run" 명령을 사용하면 컴파일 시점에서 발생하는 모든 오류를 확인할 수 있습니다.

에러 메시지 "expected declaration, found"의 구체적인 내용(예: 추가적으로 제공된 코드 위치 정보 등)을 검토하면 문제 해결에 더 도움이 될 것입니다.

반응형

댓글