我看到这个人,他写了这段代码:
func foo1() *string {
var pointa *string
pointa = new(string)
*pointa = "stuff"
return pointa
}
非常好,非常好,但是,忍不住注意到还可以写:
func foo2() *string {
var pointa *string
var str = "stuff"
pointa = &str
return pointa
}
第一个代码说:
第二个代码说:
&
,所以它将被动态分配我的这些假设正确吗? 这两个动态字符串分配等效吗?
new(string); *pointer = "payload"
是否正是第二个代码中发生的事情,但在幕后,隐式发生?
这些代码片段会产生与分配和初始化字符串相同的代码吗?
它们相同但冗长。第一个分配一个字符串指针(其中包含指向实际字符串内容及其长度的指针),然后初始化该指针以指向字符串。第二个创建一个本地指针,但由于该指针转义了该函数,因此编译器将其分配在堆上。这可以通过以下方式简化:
func foo2() *string {
var str = "stuff"
return &str
}