> 백엔드 개발 > Golang > Go에서 포인터를 사용하여 중첩된 구조체의 값을 인쇄하는 방법은 무엇입니까?

Go에서 포인터를 사용하여 중첩된 구조체의 값을 인쇄하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-29 21:24:11
원래의
191명이 탐색했습니다.

How to Print the Values of Nested Structs with Pointers in Go?

Go에서 포인터를 사용하여 구조체 값 인쇄

Go에서는 다음과 같은 구조체 값을 인쇄해야 하는 상황에 직면하는 것이 일반적입니다. 다른 구조체에 대한 포인터를 포함합니다. 그러나 fmt.Printf()에서 %v 형식 지정자의 기본 동작은 실제 값 대신 포인터 주소를 표시합니다.

다음 예를 고려하십시오.

package main

import "fmt"

type A struct {
    a int32
    B *B
}
type B struct {
    b int32
}

func main() {
    a := &A{
        a: 1,
        B: &B{
            b: 2,
        },
    }
    fmt.Printf("v ==== %+v \n", a)
}
로그인 후 복사

위 코드는 다음과 같습니다.

v ==== &{a:1 B:0xc42000e204}
로그인 후 복사

보시다시피 B 필드는 실제 주소가 아닌 B 구조체의 메모리 주소로 인쇄됩니다. value.

Stringer 인터페이스를 사용한 사용자 정의 인쇄

중첩 구조체의 내용을 인쇄하는 한 가지 방법은 A 및 B 유형 모두에 대해 Stringer 인터페이스를 구현하는 것입니다. Stringer 인터페이스에는 값의 문자열 표현을 반환하는 String()이라는 단일 메서드가 필요합니다.

다음은 Stringer 인터페이스를 사용하여 업데이트된 예입니다.

package main

import "fmt"

type A struct {
    a int32
    B *B
}

type B struct{ b int32 }

func (aa *A) String() string {
    return fmt.Sprintf("A{a:%d, B:%v}",aa.a,aa.B)
}

func (bb *B) String() string {
    return fmt.Sprintf("B{b:%d}",bb.b)
}

func main() {
    a := &A{a: 1, B: &B{b: 2}}

    // using the Stringer interface
    fmt.Printf("v ==== %v \n", a)

    // or just print it yourself however you want.
    fmt.Printf("v ==== A{a:%d, B:B{b:%d}}\n", a.a, a.B.b)

    // or just reference the values in the struct that are structs themselves
    // but this can get really deep
    fmt.Printf("v ==== A{a:%d, B:%v}", a.a, a.B)
}
로그인 후 복사

이제 출력은 다음과 같습니다. :

v ==== A{a:1, B:B{b:2}}
로그인 후 복사

수동 인쇄

경우 Stringer 인터페이스를 구현하고 싶지 않다면 print 문을 사용하여 원하는 구조체 표현을 수동으로 인쇄할 수 있습니다. 예를 들어 중첩된 구조체의 필드에 액세스하여 별도로 인쇄할 수 있습니다.

fmt.Printf("v ==== A{a:%d, B:B{b:%d}}\n", a.a, a.B.b)
로그인 후 복사

이 접근 방식을 사용하면 출력 형식을 완벽하게 제어할 수 있습니다.

위 내용은 Go에서 포인터를 사용하여 중첩된 구조체의 값을 인쇄하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿