Go:fmt.Print系列函数为什么默认情况下不打印结构体中指针字段指向的值?

在Go语言中,fmt.Println等函数默认不会打印结构体中指针字段所指向的值,这是为了避免陷入无限循环。当打印包含指针的结构体时,只有在最外层(depth为0)时才会尝试打印指针的值。如果指针指向的类型实现了fmt.Stringer接口,那么可以自定义打印方式显示指针内容。博客通过代码示例解释了这一行为,并展示了如何通过实现String方法来打印指针的值。

在Go中,一个结构体如果含有一个指针字段,在默认情况下,使用fmt.Print系列函数打印这个结构体时,并不会打印这个指针指向的值。因此,对于下面的代码:

type Foo struct {
   
   
    A int
}
type Bar struct {
   
   
    F *Foo
}
func main() {
   
   
    b := Bar{
   
   &Foo{
   
   1}}
    fmt.Printf("%+v\n", b)
}

其输出为:

{F:0xc0000140a0}

map也是类似的,如果map的value类型为指针,fmt.Print系列函数同样不会打印指针指向的值。

如果想要把指针的值打印出来,那么这个指针指向的类型需要实现fmt.Stringer接口:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值