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

问题描述

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

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

讲解

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

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

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

猜你喜欢

转载自blog.csdn.net/weixin_54174102/article/details/131537842