是否一种指针主义优于另一种?有什么区别?我首先想到的是,在某个时刻,变量必须作为非指针存在,因为永远存在指向它的指针,但是,我们可以将变量实例化为指针,那么究竟是什么呢?是首选,有什么区别? (除了明显的)。
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
}
通常,当您希望变量存在时,您需要为其分配存储空间,可以通过声明或调用new。
当你这样做时
var pc *config
您正在声明一个 pointer 变量,该变量是用
nil
初始化的,因此没有为 config
类型分配空间。为此,您需要 pc := new(config)
。
另一方面,
var pc config
为
config
类型分配存储位置,并使用其零值对其进行初始化。
在程序中使用什么取决于代码的其余部分和您的编码风格。通常,当您对值感兴趣时(例如您的
config
类型),您可以传递修改类型指针的函数,但在本地创建值并通过 by value 传递它。如果是“large”结构,则使用指针。