处理这种情况的最干净方法是什么:func a() string { /* doesn't matter */}b *string = &a()这将产生错误:不能使用a()的地址我的理解是,如果使用了Go地址,Go会自动将局部变量提升到堆中。在这里,很明显要使用返回值的地址。什么是惯用的处理方式?
3 回答
森林海
TA贡献2011条经验 获得超2个赞
&
只能用于:
可寻址的东西:变量,指针间接寻址,切片索引操作,可寻址结构的字段选择器,可寻址数组的数组索引操作;或者
复合文字
您所拥有的都不是这些,所以它是行不通的。
我什至不知道那意味着什么,即使你能做到。取一个函数调用结果的地址?通常,您将某物的指针传递给某人,因为您希望他们能够将其分配给所指向的物,并查看原始变量中的变化。但是函数调用的结果是暂时的。除非您先将其分配给其他人,否则没有其他人“看到”它。
如果创建指针的目的是创建具有动态生存期的内容,类似于new()
或获取复合文字的地址,则可以将函数调用的结果分配给变量并获取其地址。
交互式爱情
TA贡献1712条经验 获得超3个赞
最后,您建议Go应该允许您使用任何表达式的地址,例如:
i,j := 1,2
var p *int = &(i+j)
println(*p)
当前的Go编译器会显示以下错误: cannot take the address of i + j
我认为,允许程序员使用任何表达式的地址:
似乎不是很有用(也就是说:在实际的Go程序中,发生的可能性很小)。
它将使编译器和语言规范变得复杂。
使编译器和规范复杂化而收效甚微似乎适得其反。
- 3 回答
- 0 关注
- 231 浏览
添加回答
举报
0/150
提交
取消