Go에서 구조체를 예쁘게 출력하는 방법
Ethan Miller
Product Engineer · Leapcell

Key Takeaways
fmt.Printf("%+v", value)
를 사용하여 구조체 필드 이름과 값을 빠르게 출력합니다.json.MarshalIndent
는 구조체에 대한 깔끔하고 읽기 쉬운 JSON 출력을 제공합니다.spew
패키지는 깊이 중첩되거나 복잡한 데이터 구조를 검사하는 데 도움이 됩니다.
Go에서 디버깅하거나 로깅할 때 종종 구조체의 내용을 검사해야 합니다. 그러나 기본 출력 형식은 그다지 읽기 쉽지 않을 수 있습니다. 이럴 때 예쁜 출력이 유용합니다. 이 문서에서는 Go에서 구조체를 예쁘게 출력하는 다양한 방법을 살펴보겠습니다.
fmt
패키지 사용
표준 fmt
패키지는 구조체 출력을 위한 기본 형식 옵션을 제공합니다.
%+v
동사
필드 이름과 해당 값을 함께 출력하려면 %+v
동사를 사용합니다.
package main import ( "fmt" ) type User struct { Name string Email string Age int } func main() { user := User{"Alice", "alice@example.com", 30} fmt.Printf("%+v\n", user) }
출력:
{Name:Alice Email:alice@example.com Age:30}
필드 이름을 생략하는 %v
보다 더 많은 정보를 제공합니다.
encoding/json
패키지 사용
더 읽기 쉽고 형식이 지정된 출력을 위해 구조체를 들여쓴 JSON으로 직렬화할 수 있습니다.
package main import ( "encoding/json" "fmt" ) type User struct { Name string `json:"name"` Email string `json:"email"` Age int `json:"age"` } func main() { user := User{"Alice", "alice@example.com", 30} data, err := json.MarshalIndent(user, "", " ") if err != nil { fmt.Println("error:", err) return } fmt.Println(string(data)) }
출력:
{ "name": "Alice", "email": "alice@example.com", "age": 30 }
이 방법은 중첩된 구조체를 출력할 때 특히 유용합니다.
spew
패키지 사용
또 다른 유용한 도구는 github.com/davecgh/go-spew/spew
이며, Go 데이터 구조를 사람이 읽을 수 있는 형식으로 재귀적으로 출력합니다.
먼저 설치하세요.
go get -u github.com/davecgh/go-spew/spew
그런 다음 다음과 같이 사용합니다.
package main import ( "github.com/davecgh/go-spew/spew" ) type User struct { Name string Email string Age int } func main() { user := User{"Alice", "alice@example.com", 30} spew.Dump(user) }
출력:
(main.User) {
Name: (string) (len=5) "Alice",
Email: (string) (len=17) "alice@example.com",
Age: (int) 30
}
이것은 복잡하거나 깊이 중첩된 구조체를 검사하는 데 매우 유용합니다.
결론
Go에서 구조체를 예쁘게 출력하는 것은 표준 fmt
패키지, JSON 마샬링 또는 spew
와 같은 외부 패키지를 사용하여 쉽게 수행할 수 있습니다. 각 접근 방식에는 고유한 사용 사례가 있습니다.
- 빠른 인라인 디버깅에는
fmt.Printf("%+v", value)
를 사용합니다. - 깨끗하고 사람이 읽을 수 있는 로그에는
json.MarshalIndent
를 사용합니다. - 개발 중 심층 검사에는
spew.Dump
를 사용합니다.
자신의 필요에 가장 적합한 방법을 선택하고 디버깅 프로세스를 더욱 효율적으로 만드십시오!
FAQs
fmt.Println
은 필드 이름을 생략하여 디버깅에 대한 출력 정보가 줄어듭니다.
다중 라인, 사람이 읽기 쉬운 출력이 필요하거나 구조화된 데이터를 로깅하는 경우 json.MarshalIndent
를 사용합니다.
아니요, 하지만 spew
는 표준 패키지가 덜 명확하게 처리하는 복잡하거나 깊이 중첩된 데이터에 유용합니다.
Leapcell은 Go 프로젝트 호스팅을 위한 최고의 선택입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하세요.
무료로 무제한 프로젝트 배포
- 사용량에 대해서만 비용을 지불합니다. 요청이 없으면 요금이 부과되지 않습니다.
탁월한 비용 효율성
- 유휴 요금 없이 사용한 만큼만 지불합니다.
- 예: 25달러로 평균 응답 시간 60ms에서 694만 개의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
간편한 확장성 및 고성능
- 고성능 동시성을 쉽게 처리할 수 있도록 자동 확장.
- 운영 오버헤드가 없으므로 구축에만 집중하세요.
설명서에서 자세히 알아보세요!
X에서 저희를 팔로우하세요: @LeapcellHQ