[Golang实战] 结构体中部分字段为什么用指针类型而不使用值类型讲解

本文探讨了Golang中结构体字段使用指针类型而非值类型的原因,主要在于避免大体积结构体拷贝导致的性能损耗,提高效率,并实现字段的可选性。同时指出,对于小体积结构体,使用值类型也是可行的,具体选择取决于场景需求。
摘要由CSDN通过智能技术生成

问题描述

type LibraryConfig struct {
	Mode         string `mapstructure:"mode"`
	Port         int    `mapstructure:"port"`
	*LogConfig   `mapstructure:"log"`
	*MysqlConfig `mapstructure:"mysql"`
	*RedisConfig `mapstructure:"redis"`
}

你知道或者能讲解一下为什么这个结构体中使用指针类型来定义结构体吗?之前我总是一带而过,这一次我想弄懂不切记录一下,方便后续回顾

讲解

首先结构体字段类型可以用 值类型或者指针类型

使用指针传递结构体原因是为了避免拷贝大量的数据,当将一个结构体作为值类型传递时,会发生一次完成的拷贝操作,包括结构体中的每个字段,如果结构体较大或者包含大量数据,会导致显著的性能损耗。
相比之下,使用指针传递结构体只需要传递指向结构体的地址,而不会进行真正的拷贝操作,做到节省时间和内存,效率更高

同时使用指针还可以实现结构体字段的可选性,通过使用指针类型的字段,可以将其设为nil来表示起字段不需要使用或者没有提供值,在部分场景下非常有用。
使用指针传递结构体可以提高性能并允许字段的可选性。然而,如果结构体较小或者包含少量字段,使用值类型传递也是可以的,因为拷贝的开销相对较小。选择指针传递还是值类型传递取决于具体的情况和需求。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万物皆可der

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值