新函数与未初始化变量的区别

Yos*_*nar 0 go

新函数和未初始化变量有什么区别?两者的优点是什么?

s := new(string) // *string
var s *string    // *string
var s string     // string
Run Code Online (Sandbox Code Playgroud)

仅仅是为了代码简单吗?因为我觉得是一样的

s := new(string) /* same as */ var s *string = &emptyString
Run Code Online (Sandbox Code Playgroud)

jnm*_*oal 5

这段代码:

var s *string
Run Code Online (Sandbox Code Playgroud)

只需将“s”声明为指向字符串的指针即可。在这种情况下,“s”是一个 nil 指针,这是 golang 中指针的默认值。

这段代码:

s := new(string)
Run Code Online (Sandbox Code Playgroud)

还将“s”声明为指向字符串的指针,但这次字符串被初始化。这意味着“s”是一个非nil指针,指向golang中string的默认值,一个空字符串。

看看这个游乐场

  • 是的。仅前一种形式仅支持“struct”类型。但*概念上*它们是相同的。我也很确定编译器最终会为它们生成相同的代码。 (2认同)