处理这样的案件最干净的方式是什么:
func a() string {
/* doesn't matter */
}
b *string = &a()
这会生成错误:
无法获取()的地址
我的理解是,如果取局部变量的地址,Go会自动将其提升到堆中.这里很明显,返回值的地址将被获取.处理这个问题的惯用方法是什么?
处理这样的案件最干净的方式是什么:
func a() string {
/* doesn't matter */
}
b *string = &a()
这会生成错误:
无法获取()的地址
我的理解是,如果取局部变量的地址,Go会自动将其提升到堆中.这里很明显,返回值的地址将被获取.处理这个问题的惯用方法是什么?
地址操作符返回指向具有"home"的东西的指针,例如变量.代码中表达式的值是"无家可归".如果您确实需要*字符串,则必须分两步完成:
tmp := a(); b := &tmp
请注意,虽然*String有完全有效的用例,但很多时候使用它们是错误的.在GO中,string
是一个值类型,但是传递起来很便宜(一个指针和一个整数).字符串的value是不可变的,更改*string
会更改"home"指向的位置,而不是字符串值,因此在大多数情况下根本不需要*string
.