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



