我发现Golang中的以下代码有效:
type user struct {
name *string
email *string
}
func foo() (*user, error) {
var myname string
var myemail string
// Some code here to fetch myname and myemail
u := user{}
u.name = &myname
u.email = &myemail
return &u, nil
}
我知道返回指向局部变量的指针是safe,因为局部变量将在函数的范围内保留,因此我不关心从函数&u
返回foo()
。
我担心的是作业:
u.name = &myname
u.email = &myemail
Go编译器是否偶然在堆中分配了u.name
和u.email
,以便我可以在函数外部访问它,或者可以保证它始终有效(通过指针转义分析机制)?] >
如果上面的代码不安全,我将退回至以下内容:
u.name = new(string)
*u.name = myname
...
[我发现Golang中的以下代码有效:键入user struct {name * string email * string} func foo()(* user,error){var myname string var myemail string //这里有一些代码可以提取...] >