首页 > 后端开发 > Golang > 如何在没有指针地址的情况下在 Golang 中打印结构体的嵌套指针值?

如何在没有指针地址的情况下在 Golang 中打印结构体的嵌套指针值?

DDD
发布: 2024-12-07 17:04:11
原创
321 人浏览过

How to Print a Struct's Nested Pointer Value in Golang Without the Pointer Address?

如何在 Golang 中使用指针打印结构体值

考虑以下代码片段:

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) // output: v ==== &{a:1 B:0xc42000e204}
}
登录后复制

这里,您想要打印 B 的值而不使用其指针表示形式。为了实现这一目标,有几个选项:

1。实现 Stringer 接口:

fmt.Printf() 函数调用 String() 方法(如果要打印的类型存在该方法)。为 A 和 B 结构实现 String() 方法:

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)
}
登录后复制

通过此实现,输出将为:

v ==== A{a:1, B:B{b:2}}
登录后复制
登录后复制

2。自定义打印格式:

您可以直接格式化输出字符串以仅包含所需的字段:

fmt.Printf("v ==== A{a:%d, B:B{b:%d}}\n", a.a, a.B.b)
登录后复制

输出:

v ==== A{a:1, B:B{b:2}}
登录后复制
登录后复制

3.引用结构体中的值:

由于 B 是 A 中的字段,因此可以直接引用其值:

fmt.Printf("v ==== A{a:%d, B:%v}", a.a, a.B)
登录后复制

输出:

v ==== A{a:1, B:&{b:2}}
登录后复制

以上是如何在没有指针地址的情况下在 Golang 中打印结构体的嵌套指针值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板