如何决定何时将变量实例化为指针?

问题描述 投票:0回答:1

是否一种指针主义优于另一种?有什么区别?我首先想到的是,在某个时刻,变量必须作为非指针存在,因为永远存在指向它的指针,但是,我们可以将变量实例化为指针,那么究竟是什么呢?是首选,有什么区别? (除了明显的)。

var pc config                          //  this line
func proxyConf() {
    file, _ := os.ReadFile(proxyConfPath)
    json.Unmarshal(file, &pc)          //  and this line
}

var pc *config                         //  this line
func proxyConf() {
    b, _ := os.ReadFile(proxyConfPath)
    json.Unmarshal(file, pc)           //  and this line
}
go pointers
1个回答
0
投票

通常,当您希望变量存在时,您需要为其分配存储空间,可以通过声明调用new

当你这样做时

var pc *config

您正在声明一个 pointer 变量,该变量是用

nil
初始化的,因此没有为
config
类型分配空间。为此,您需要
pc := new(config)

另一方面,

var pc config

config
类型分配存储位置,并使用其零值对其进行初始化。

在程序中使用什么取决于代码的其余部分和您的编码风格。通常,当您对值感兴趣时(例如您的

config
类型),您可以传递修改类型指针的函数,但在本地创建值并通过 by value 传递它。如果是“large”结构,则使用指针。

© www.soinside.com 2019 - 2024. All rights reserved.