将指向局部变量的指针分配给在Golang中作为指针返回的结构是否安全

问题描述 投票:0回答:1

我发现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.nameu.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 //这里有一些代码可以提取...] >

go memory-management
1个回答
0
投票

我深入研究并从herehere中找出了如何进一步研究并满足我的查询的事实,即在结构体中将指针设置为局部变量确实是安全的,该结构体本身将作为指针从一个功能。

我的程序(打印行号以更好地理解):

© www.soinside.com 2019 - 2024. All rights reserved.